在python中将多个文件循环到单个csv文件中

时间:2017-06-15 00:31:44

标签: python list file

我正在尝试使用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()

正在创建新文件,但其中没有任何内容。我很好奇发生了什么事。

谢谢!

2 个答案:

答案 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)

我认为您的程序崩溃有几个原因:

  1. open(..)是一个功能,所以你不能写:

    with open oldfile as file:
    
  2. 文件的 with 语句用于强制关闭文件,因此实际上不需要file.close()。< / p>

  3. .reverse() 就位:它会返回None,您可以使用reversed(..)

  4. 你可以用以下方法修复它:

    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)反向获取文件的行。