我编写了一个程序,可以读取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 中的文件?