[英]Writing a list to a file without a newline Python
我有以下代碼,我只希望它將列表寫入文件。 這樣做,但是每次都有一個空行,這會導致每次迭代都出現問題!
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
如前所述,在保存列表時,我不需要空白行。 另外,我會對更優雅或更佳的方式做同一件事感興趣。 我希望將文件讀入列表,然后再將其寫回到文件,就格式而言,它與文件中存儲的內容完全相同。
提前致謝
編輯:我誤解了csv模塊在編寫此答案時是如何輸出的,但是由於降級對它有幫助,因此我沒有刪除它。 請查看我最近的更准確的答案。
降檔在評論中回答了這個問題,但我將嘗試提供更多有關為什么發生這種情況的詳細信息。
當您從csv閱讀器中讀取每一行時,它會為您提供整行,並在末尾包含換行符( \\n
)。 您的問題源於以下事實:寫入文件時,write函數將其自己的換行符添加到字符串的末尾。 幸運的是,有兩種非常簡單的方法可以從csv閱讀器返回的行尾刪除換行符。
一種方法是使用字符串的.strip()
方法,該方法以字符串形式輸入一些字符作為輸入,並從字符串的.strip()
盡可能多的這些字符。 使用此方法,您可以替換:
allfilms.append(row)
與
allfilms.append(row.strip("\n"))
您可以執行的另一種方法是使用字符串切片並切掉字符串的最后一個字符。 我不建議您為此使用字符串切片,因為不清楚您在做什么,但是如果您願意,可以替換為:
allfilms.append(row)
與
allfilms.append(row[:-1])
row[:-1]
將返回不包含最后一個字符的row,並丟棄換行符。
希望這對您有所幫助!
我相信問題的根源是,當您打開films.txt
,您忘了像文檔所說使用的那樣包含newline=''
參數。 這意味着您的代碼變為:
with open("films.txt", mode='r', newline='') as f:
和
with open("films.txt", mode='w', newline='') as f:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.