在没有换行符Python的情况下将列表写入文件

时间:2017-01-27 00:01:29

标签: python list

我有以下代码,我只想让它将列表写入文件。它会这样做,但每次都有一个空行,这会导致每次迭代出现问题!

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 个答案:

答案 0 :(得分:1)

编辑:当我写这个答案时,我误解了csv模块如何给出输出,但由于降档的有用评论,我没有删除它。请参阅我最近更准确的答案。

降档在评论中回答了这个问题,但我会尝试详细说明为什么会发生这种情况。

当您从csv阅读器中读取每一行时,它会为您提供整行,其中包含最后一行的换行符(\n)。您的问题源于这样一个事实:当您写入文件时,write函数会将其自己的换行符添加到字符串的末尾。幸运的是,有两种非常简单的方法可以从csv阅读器返回的行末尾删除换行符。

一种方法是使用字符串的.strip()方法,它以字符串的形式接收一些字符作为输入,并从字符串的末尾开始尽可能多的字符。使用此方法可以替换:

allfilms.append(row)

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

另一种方法是使用字符串切片并切掉字符串的最后一个字符。我不建议你使用字符串切片,因为你不太清楚自己在做什么,但如果你愿意,你会替换:

allfilms.append(row)

allfilms.append(row[:-1])

row[:-1]将返回排除最后一个字符的行,丢弃换行符。

希望这有助于你!

答案 1 :(得分:1)

我认为您的问题的根源在于,当您打开films.txt时,您忘记将newline=''参数包含在docs中,以便使用。这意味着您的代码变为:

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

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