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

在python中将多个文件循环到单个csv文件中,python,list,file,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.revers

我正在尝试使用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))
    files=[“file1.txt”、“file2.txt”、“file3.txt”]
    def剂量测量(旧文件):
    内容=[]
    打开(旧文件,'r')作为文件:
    返回列表(已反转(文件))
    打开(“newfile.txt”、“w”)作为文件:
    w=csv.writer(文件,方言=“excel选项卡”)
    对于文件中的旧文件:
    w、 writerows(doSomething(旧文件))

    我还在列表上使用了
    for
    循环,而不是索引,因为这更“pythonic”。此外,
    文件
    可以覆盖其行。因此,可以使用
    reversed(file)
    反向获取文件的行。

    将openoldfile作为文件:
    如果这行是逐字复制的,我很惊讶它会运行。另外,作为pythonic的一个方面,将for循环替换为
    for file in files:w.writerows(doSomething(file))