如何避免在编写CSV文件时出现多余的空行?[duplicate]

kxe2p93d  于 2023-01-03  发布在  其他
关注(0)|答案(2)|浏览(134)
    • 此问题在此处已有答案**:

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

如前所述,我不希望在保存列表时出现空行。此外,我对更优雅或更好的方法也很感兴趣。我希望文件被读入列表,然后写回文件,格式与存储在文件中的格式完全相同。
先谢了

s4n0splo

s4n0splo1#

我认为问题的根源是当你打开films.txt时,你忘记了包含newline=''参数,因为docs要求使用它。

with open("films.txt", mode='r', newline='') as f:

以及

with open("films.txt", mode='w', newline='') as f:
ktecyv1j

ktecyv1j2#

  • 编辑:当我写这个答案时,我误解了csv模块是如何输出的,但我不会删除它,因为它有降档的帮助评论。请参阅我最近更准确的答案。*

downshift在评论中回答了这一点,但我会尝试给予更多一点细节,为什么会发生这种情况。
当您从csv阅读器读入每一行时,它会给出整行,其中包括换行符(\n)。您的问题源于这样一个事实,即当您写入文件时,write函数会在字符串的末尾添加自己的换行符。幸运的是,有两种非常简单的方法可以删除从csv阅读器返回的行末的换行符。
一种方法是使用字符串的.strip()方法,该方法以字符串的形式接收一些字符作为输入,并从字符串的末尾尽可能多地去除这些字符。使用该方法,您可以替换:

allfilms.append(row)

allfilms.append(row.strip("\n"))

另一种方法是使用字符串切片,切掉字符串的最后一个字符。我不推荐你使用字符串切片,因为它不太清楚你在做什么,但如果你想,你可以替换为:

allfilms.append(row)

allfilms.append(row[:-1])

row[:-1]将返回不包括最后一个字符的行,并丢弃换行符。
希望这对你有帮助!

相关问题