[英]Looping multiple files into a single csv file in python
我正在嘗試使用python將多個文件處理為單個合並的csv文件。 到目前為止,我有
files = ["file1.txt", "file2.txt", "file3.txt"]
def doSomething(oldfile):
content = []
with open oldfile as file:
content = file.read().splitlines()
file.close()
return content.reverse()
with open("newfile.txt", "w") as file:
w = csv.writer(file, dialect = "excel-tab")
for i in range(0, len(files)):
w. writerows(doSomething(files[i])
file.close()
正在創建新文件,但其中沒有任何內容。 我很好奇發生了什么。
謝謝!
對於初學者, list.reverse()
在原地反轉列表,並且不返回任何內容,因此您實際上是從doSomething()
函數返回None
。 您實際上需要將其分為兩行:
content.reverse()
return content
如果您想簡化代碼,這里有一個建議:
def doSomething(oldfile):
with open(oldfile, "r") as f:
return reversed(f.read().splitlines())
files = ["file1.txt", "file2.txt", "file3.txt"]
with open("newfile.txt", "wb") as file:
w = csv.writer(file, dialect = "excel-tab")
for current_file in files:
w.writerows(doSomething(current_file))
我認為您的程序崩潰有幾個原因:
open(..)
是一個函數 ,因此您不能編寫:
with open oldfile as file:
文件的with
語句用於強制關閉文件,因此file.close()
實際上不是必需的。
.reverse()
就地工作 :它返回None
,您可以為此使用reversed(..)
。
您可以使用以下方法修復它:
files = ["file1.txt", "file2.txt", "file3.txt"]
def doSomething(oldfile):
content = []
with open(oldfile,'r') as file:
return list(reversed(file))
with open("newfile.txt", "w") as file:
w = csv.writer(file, dialect = "excel-tab")
for oldfile in files:
w.writerows(doSomething(oldfile))
我還在列表上使用了for
循環,而不是索引,因為那更像是“ pythonic ”。 此外, file
可在其行上進行迭代。 因此,可以使用reversed(file)
獲取reversed(file)
的行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.