9

我用谷歌搜索的东西没有用,所以我求助于专家!

我在制表符分隔的文本文件中有一些文本,其中包含某种回车符(当我在 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] 的文本行,它按预期工作。

4

5 回答 5

4

从技术上讲,有一个答案!

with open(filetoread, "rb") as inf:
    with open(filetowrite, "w") as fixed:
        for line in inf:
            fixed.write(line)

b inopen(filetoread, "rb")显然以我可以访问这些换行符并删除它们的方式打开文件。这个答案实际上来自站点外的 Stack Overflow 用户 Kenneth Reitz。

谢谢大家!

于 2013-07-16T14:16:57.960 回答
4

以下是在不使用临时文件的情况下删除回车的方法:

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

with open(file_name, 'w', newline='\n') as file:
    file.write(content)
于 2017-02-24T15:16:27.527 回答
2

根据文件的类型(以及它来自的操作系统等),您的回车可能是'\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

希望这可以帮助

于 2013-07-15T15:36:18.990 回答
2

Python 在所谓的 中打开文件universal newline mode,所以换行符总是\n.

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

您逐行遍历文件。你正在换\n行。但实际上没有,\n因为行已经\n由迭代器分隔,并且每行都包含 no \n

你可以从文件中读取f.read()。然后在里面替换\n

with open(infile, "r") as f:
    content = f.read()
    content = content.replace('\n', ' ')
    #do something with content
于 2013-07-15T15:39:29.473 回答
1

我已经创建了一个代码来做到这一点,它的工作原理:

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)
于 2016-03-10T01:12:08.337 回答