Writing Output of Python Program to .txt File
我编写了一个程序来读取CSV文件并将内容作为插入语句输出。 然后我编写了一个执行程序,它应该获取CSV解析器程序的输出并将其写入.txt文件,但不是写入整个输出,而是只编写第一个语句。
这是执行者的代码:
1 2 3 4 | import sys with open('insert.txt', 'wb') as f: subprocess.check_call(["python","CSVParserMultiple.py"], stdout=f) |
以及解析器的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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嵌套打开的语句。 一个程序。 它打印到屏幕并写入文件。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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) +");" +" ") |
不确定这是否适合您,但您可以使用> / >>运算符将stdout重新路由到文件。
编辑:>和>>之间的区别是>> >>会附加到文件的末尾,而>会截断文件
1 | $python program.py >> output.txt |
要合并程序,可以将执行程序定义为主函数,方法是将其定义为
1 2 3 4 | def main(): <executor code here> if __name__ =="__main__": main() |
然后,您可以使用将stdout重定向到文件
1 | sys.stdout = open("file",'w') |
类似的问题:将stdout重定向到Python中的文件?