将 Python 程序的输出写入.txt文件



我编写了一个程序,可以读取CSV文件并将内容输出为插入语句。然后,我编写了一个执行程序,该程序应该获取CSV解析器程序的输出并将其写入.txt文件,但不是写入整个输出,而是只写入第一条语句。

以下是执行程序的代码:

import sys
with open('insert.txt', 'wb') as f:
    subprocess.check_call(["python", "CSVParserMultiple.py"], stdout=f)

解析器的代码:

import csv, os
path = 'C:/Users/user/Desktop/test/'
for file in os.listdir(path):
    if file.endswith('.csv'):
# print ('Parsing file: ' + os.path.basename(path + file))
        openFile = open(path + file)
        csvFile = csv.reader(openFile)
        getHeader = next(csvFile)
        columnHeaders = map((lambda x: "'" + x + "'"), getHeader[:-1])
        insert = 'INSERT INTO testing (' + "'ID', 'VehicleID', " + ', '.join(columnHeaders) + ') VALUES '
        for row in csvFile:
            values = map((lambda x: "'" + x.strip() + "'"), row[:-1])
            print (insert + "(" + ", ".join(values) + ");")
        openFile.close()

我不完全确定将它们作为两个单独的程序是否有意义,但我无法让它们在我一生中在同一程序中作为定义的函数运行。如何让执行程序输出解析器程序的所有行,而不仅仅是一行?我怎样才能将它们组合成一个程序?

你让事情变得比他们需要的更复杂。 只需使用 with 嵌套您的开放语句即可。一个程序。 它打印到屏幕上并写入文件。

import csv, os
path = 'C:/Users/user/Desktop/test/'
for file in os.listdir(path):
    if file.endswith('.csv'):
        # print ('Parsing file: ' + os.path.basename(path + file))
        with open(path + file) as infile:
            with open(path+file+".txt",'w') as outfile:
                csvFile = csv.reader(infile)
                getHeader = next(csvFile)
                columnHeaders = map((lambda x: "'" + x + "'"), getHeader[:-1])
                insert = 'INSERT INTO testing (' + "'ID', 'VehicleID', " + ', '.join(columnHeaders) + ') VALUES '
                for row in csvFile:
                    values = map((lambda x: "'" + x.strip() + "'"), row[:-1])
                    print (insert + "(" + ", ".join(values) + ");")
                    outfile.write(insert + "(" + ", ".join(values) + ");" + "n")

不确定这是否适合您,但您可以使用>/>> 运算符将 stdout 重新路由到文件。

编辑:>和>>之间的区别在于>>附加到文件末尾,而>截断文件

$python program.py >> output.txt

要组合程序,您可以通过将其定义为

def main():
    <executor code here>
if __name__ == "__main__":
     main()

然后,您可以使用以下命令将标准输出重定向到文件

sys.stdout = open("file",'w')

类似的问题:将标准输出重定向到 Python 中的文件?

相关内容

  • 没有找到相关文章

最新更新