如何使用Python从文本文件中删除回车符?

10

我已经搜索过谷歌,但是没有找到有效的解决方法,所以现在我想请教专家!

我有一个以制表符分隔的文本文件,其中包含某种回车符(当我在Notepad ++中打开并使用“显示所有字符”时,在行末看到[CR] [LF])。 我需要删除这个回车符(或者它是什么),但我似乎无法弄清楚。以下是文本文件的片段,显示了一个带有回车符的行:

firstcolumn secondcolumn    third   fourth  fifth   sixth       seventh
moreoftheseventh        8th             9th 10th    11th    12th                    13th

这是我试图使用的代码来替换它,但它没有找到返回值:
with open(infile, "r") as f:
    for line in f:
        if "\n" in line:
            line = line.replace("\n", " ")

我的脚本找不到回车符。我是做错了什么还是对回车符有错误的假设?我可以在文本编辑器中手动删除它,但是文本文件中大约有5000个记录也可能存在此问题。
更多信息: 这里的目标是从文本文件中选择两列,因此我按 \t 字符拆分并将值引用为数组的部分。它可以在没有回车符的任何行上工作,但是在有回车符的行上失败,例如,在这些行中没有元素9。
vals = line.split("\t")
print(vals[0] + " " + vals[9])

所以,对于上面的文本行,这段代码失败了,因为该特定数组中没有索引9。对于没有[CR][LF]的文本行,它按预期工作。

尝试搜索Windows的回车符"\r\n"。 - rantanplan
1
你把这些行写回文件里吗? - ovgolovin
查找 \r\n 失败。 - mrcoulson
不,我不需要把这些行写回去。我只需要在使用它们的脚本中更改值即可。 - mrcoulson
为什么需要删除EOL字符?你是想将文件转换为Unix EOL样式,还是只是想将数据连接在一起?如果是前者,你应该使用f = open(filename,"w", newline="\n")打开文件,然后立即将其写回。 - roippi
5个回答

7

根据文件类型(以及它来自的操作系统等),你的换行符可能是'\r''\n''\r'\n'。无论哪种情况最好的办法都是使用line.rstrip()来去除它们。

with open(infile, "r") as f:
    for line in f:
        line = line.rstrip() # strip out all tailing whitespace

如果你只想去掉回车符,而不是可能存在于结尾的任何额外空格,你可以提供可选参数给rstrip

with open(infile, "r") as f:
    for line in f:
        line = line.rstrip('\r\n') # strip out all tailing whitespace

希望这可以帮到您。

6

以下是无需使用临时文件删除回车符的方法:

with open(file_name, 'r') as file:
    content = file.read()

with open(file_name, 'w', newline='\n') as file:
    file.write(content)

最好使用临时文件-如果在写入数据时出现错误,则文件中的数据将丢失。 - user2682863

5

Python以所谓的通用换行符模式打开文件,因此换行符始终为\n

Python通常建立具有通用换行符支持;提供'U'将文件作为文本文件打开,但行可能由以下任何一种形式终止:Unix的行末约定“\n”,Macintosh约定“\r”或Windows约定“\r\n”。 Python程序将所有这些外部表示均视为“\n”。

您可以逐行遍历文件。并替换行中的\n。但实际上没有\n,因为迭代器已将行分隔为\n,每行不包含\n

您只需从文件中读取f.read()。然后替换其中的\n

with open(infile, "r") as f:
    content = f.read()
    content = content.replace('\n', ' ')
    #do something with content

我是否仍然能够访问这样的内容?对于内容中的每一行: - mrcoulson
@mrcoulson 不会。所有的换行符都将被替换为 ' ' - ovgolovin
你想如何保留行并删除[CR][LF]并不清楚。 - ovgolovin
文本文件中有记录结束得太快,这些是我需要修复的。我这样做是错的吗? - mrcoulson

4
技术上,这个问题是有答案的!
with open(filetoread, "rb") as inf:
    with open(filetowrite, "w") as fixed:
        for line in inf:
            fixed.write(line)
< p > 在 < code > open(filetoread, "rb") 中的 b 显然以这样的方式打开文件,我可以访问那些换行符并将它们删除。这个答案实际上来自 Stack Overflow 的用户 Kenneth Reitz。

谢谢大家!


3
我已经编写了一段代码来实现它,而且它能够正常工作:
end1='C:\...\file1.txt'
end2='C:\...\file2.txt'
with open(end1, "rb") as inf:
     with open(end2, "w") as fixed:
        for line in inf:
            line = line.replace("\n", "")
            line = line.replace("\r", "")
            fixed.write(line)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接