python分⾏写⼊⽂件并输出_将Python程序的输出写⼊.txt⽂件我编写了⼀个程序来读取CSV⽂件并将内容作为插⼊语句输出。 然后我编写了⼀个执⾏程序,它应该获取CSV解析器程序的输出并将其写⼊.txt⽂件,但不是写⼊整个输出,⽽是只编写第⼀个语句。
这是执⾏者的代码:
import sys
with open('', '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):
dswith('.csv'):
# print ('Parsing file: ' + os.path.basename(path + file))
openFile = open(path + file)
csvFile = ader(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()
我不完全确定将它们作为两个独⽴的程序是有意义的,但我不能让它们在我的⽣命中在同⼀程序中作
为定义的函数运⾏。 如何让执⾏程序输出解析器程序的所有⾏⽽不是单⾏? 我怎样才能将它们组合成⼀个程序?
您应该将这些操作放在函数中。 如果您希望能够重⽤模块并从其他脚本调⽤它们,则需要通过创建python包/模块来安装它们。
通过⼦进程调⽤python⽂件⾮常荒谬。 不要那样做。 如果你需要将它分开并且不同的功能不够好,那么创建⼀个你⾃⼰的模块
不确定为什么只有第⼀⾏显⽰在输出⽂件中。 但是要组合这两个脚本,只需将with open语句放在第⼆个脚本中,然后使⽤
f.write('something
')⽽不是print。
你使事情变得⽐他们需要的更复杂。 只需使⽤with嵌套打开的语句。 ⼀个程序。 它打印到屏幕并写⼊⽂件。
import csv, os
path = 'C:/Users/user/Desktop/test/'
for file in os.listdir(path):shell创建文件并写入内容
dswith('.csv'):
# print ('Parsing file: ' + os.path.basename(path + file))
with open(path + file) as infile:
with open(path+file+".txt",'w') as outfile:
csvFile = ader(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) +");" +"
")
两个⼩错误,否则这正是我想要的。第⼀种是将with open(path + file +".txt") as outfile:更改为with open(path + file +".txt","w") as outfile:以允许写⼊权限。第⼆个是在shell中显⽰正确的输出,但在.txt⽂件中只打印了标题,之后没有后续值。我不太确定如何解决这个问题,但⾮常感谢你的帮助。
如果您的值是数字⽽不是字符串,则可能是"。"。join语句有问题。我打印出"⾏"和"值"以查看转换是否按预期进⾏。我会使⽤⼀个只有5⾏数据的测试⽂件。这样,任何错误消息都不会因滚动⽽丢失。
print(row)表明每个值确实是字符串(例如 - '11:47'),尽管它们包含数字。 print(values)导致。我不确定这意味着什么但是看到(insert +" (" +",".join(values) +");")语句在shell中正确输出我会假设row和values都正常⼯作。然后,错误必须在.write本⾝内(⽆论是语法,还是我从print语句或其他内容完全复制)或在上⾯定义outFile的with语句中。
⽆论出于什么原因,在执⾏outFile.write之前摆脱print语句。不知道为什么。
我想到了。这是因为lambda是⼀个临时功能。这可以通过两种不同的⽅式解决。第⼀个定义values⽽不使⽤lambda函数或更简单的解决⽅案是在使⽤.write⽅法之后再次粘贴lambda函数,然后编写打印函数。
不确定这是否适合您,但您可以使⽤> / >>运算符将stdout重新路由到⽂件。
编辑:>和>>之间的区别是>> >>会附加到⽂件的末尾,⽽>会截断⽂件
$python program.py >>
要合并程序,可以将执⾏程序定义为主函数,⽅法是将其定义为
def main():
if __name__ =="__main__":
main()
然后,您可以使⽤将stdout重定向到⽂件
sys.stdout = open("file",'w')
类似的问题:将stdout重定向到Python中的⽂件?
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论