我编写了一个程序来读取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()
我不完全确定将它们作为两个独立的程序是有意义的,但是我不能让它们在我的生命中在同一个程序中作为定义的函数运行。 如何让执行程序输出解析器程序的所有行而不是单行?我怎样才能将它们组合成一个程序?
答案 0 :(得分:0)
不确定这是否适合您,但您可以使用> />>运算符将stdout重新路由到文件。
编辑:>之间的区别和>>那是>>在>附加到文件的末尾截断文件
$python program.py >> output.txt
要合并程序,可以将执行程序定义为主函数,方法是将其定义为
def main():
<executor code here>
if __name__ == "__main__":
main()
然后,您可以使用
将stdout重定向到文件sys.stdout = open("file",'w')
答案 1 :(得分:0)
你使事情变得比他们需要的更复杂。只需使用和嵌套您的开放语句。一个程序。它会打印到屏幕并写入文件。
If Not IsError(Application.Average(Range(ColLtr & "2:" & ColLtr & LR))) Then
ave = Application.Average(Range(ColLtr & "2:" & ColLtr & LR))
Else
MsgBox "Error value in cells"
End If