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

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中的文件?