我正在尝试使用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()
正在创建新文件,但其中没有任何内容。我很好奇发生了什么事。
谢谢!
答案 0 :(得分:0)
对于初学者,list.reverse()
会撤消列表并且不会返回任何内容,因此您基本上会从None
函数返回doSomething()
。你真的想把它分成两行:
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))
答案 1 :(得分:0)
我认为您的程序崩溃有几个原因:
open(..)
是一个功能,所以你不能写:
with open oldfile as file:
文件的 with
语句用于强制关闭文件,因此实际上不需要file.close()
。< / p>
.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)
反向获取文件的行。