我用Google搜索的东西没有用,所以我转向专家!
我在制表符分隔的文本文件中有一些文本,其中有一些回车符(当我在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]的文本行,它按预期工作。
答案 0 :(得分:3)
从技术上讲,有一个答案!
with open(filetoread, "rb") as inf:
with open(filetowrite, "w") as fixed:
for line in inf:
fixed.write(line)
open(filetoread, "rb")
中的b显然以这样一种方式打开文件,即我可以访问这些换行符并删除它们。这个答案实际上是来自Stack Overflow用户Kenneth Reitz的网站。
谢谢大家!
答案 1 :(得分:1)
根据文件类型(以及它来自的操作系统等),您的回车可能是'\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
希望这有帮助
答案 2 :(得分:1)
Python在所谓的universal newline mode
中打开文件,因此新行总是\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
答案 3 :(得分:1)
我要关闭这个。如果这不是关闭问题的正确方法,有人会告诉我。我意识到我从完全错误的角度出发。即使我可以删除回车,我最终会得到一条长线而不是5000条线。
感谢所有答案。无论如何我学到了一些东西。抱歉浪费了任何人的时间!
答案 4 :(得分:0)
我已经创建了一个代码来完成它并且有效:
ArrayList<String> res = new ArrayList<String>();
int i=0,j=0;
while(i<l1.size() && j<l2.size()){
res.add(l1.get(i++));
res.add(l2.get(j++));
}
while(i<l1.size()){
res.add(l1.get(i++));
}
while(j<l2.size()){
res.add(l2.get(j++));
}
for (int j2 = 0; j2 < res.size(); j2++) {
System.out.println(j2 +" : "+res.get(j2));
}
答案 5 :(得分:0)
以下是如何在不使用临时文件的情况下删除回车:
with open(file_name, 'r') as file:
content = file.read()
with open(file_name, 'w', newline='\n') as file:
file.write(content)