- 此问题在此处已有答案**:
CSV in Python adding an extra carriage return, on Windows(6个答案)
昨天关门了。
我有下面的代码,我只是想让它把列表写到一个文件中。它做到了,但是每次都有一个空行,这会导致每次迭代都有问题!
with open("films.txt", mode='r') as f:
allfilms=[]
reader = csv.reader(f)
for row in reader:
#create a list again which reads in and stores all films in the file
allfilms.append(row)
print(allfilms)
with open("films.txt","w") as f:
writer=csv.writer(f)
writer.writerows(allfilms)
输出为:0,类型,标题,评分,喜欢
1,Sci-Fi,Out of the Silent Planet, PG, 0
2,Sci-Fi,Solaris, PG,0
3,Sci-Fi,Star Trek, PG, 0
4,Sci-Fi,Cosmos, PG, 0
如前所述,我不希望在保存列表时出现空行。此外,我对更优雅或更好的方法也很感兴趣。我希望文件被读入列表,然后写回文件,格式与存储在文件中的格式完全相同。
先谢了
2条答案
按热度按时间s4n0splo1#
我认为问题的根源是当你打开
films.txt
时,你忘记了包含newline=''
参数,因为docs要求使用它。以及
ktecyv1j2#
downshift在评论中回答了这一点,但我会尝试给予更多一点细节,为什么会发生这种情况。
当您从csv阅读器读入每一行时,它会给出整行,其中包括换行符(
\n
)。您的问题源于这样一个事实,即当您写入文件时,write函数会在字符串的末尾添加自己的换行符。幸运的是,有两种非常简单的方法可以删除从csv阅读器返回的行末的换行符。一种方法是使用字符串的
.strip()
方法,该方法以字符串的形式接收一些字符作为输入,并从字符串的末尾尽可能多地去除这些字符。使用该方法,您可以替换:与
另一种方法是使用字符串切片,切掉字符串的最后一个字符。我不推荐你使用字符串切片,因为它不太清楚你在做什么,但如果你想,你可以替换为:
与
row[:-1]
将返回不包括最后一个字符的行,并丢弃换行符。希望这对你有帮助!