Python 3.x 如何通过STDIN将字符串传递到python脚本中正在执行的终端命令中?
我需要从数据帧生成postgres模式。我发现csvkit库非常接近匹配的数据类型。我可以通过终端运行csvkit,并在我的桌面上通过csv生成postgres模式,方法是使用文档中的以下命令:Python 3.x 如何通过STDIN将字符串传递到python脚本中正在执行的终端命令中?,python-3.x,postgresql,stdin,csvkit,Python 3.x,Postgresql,Stdin,Csvkit,我需要从数据帧生成postgres模式。我发现csvkit库非常接近匹配的数据类型。我可以通过终端运行csvkit,并在我的桌面上通过csv生成postgres模式,方法是使用文档中的以下命令: csvsql -i postgresql myFile.csv csvkit文件- 我可以通过以下代码在脚本中运行terminal命令: import os a=os.popen("csvsql -i postgresql Desktop/myFile.csv").read() 但是,我有一个数据
csvsql -i postgresql myFile.csv
csvkit文件-
我可以通过以下代码在脚本中运行terminal命令:
import os
a=os.popen("csvsql -i postgresql Desktop/myFile.csv").read()
但是,我有一个数据框,我已将其转换为csv字符串,需要从字符串生成模式,如下所示:
csvstr = df.to_csv()
在文档中,它表示在位置参数下:
The CSV file(s) to operate on. If omitted, will accept
input on STDIN
如何将变量csvstr
作为变量传递到codea=os.popen(“csvsql-I postgresql csvstr”).read()的行中
我试图执行下面的代码行,但出现错误OSError:[Errno 7]参数列表太长:'/bin/sh'
:
a=os.popen("csvsql -i postgresql {}".format(csvstr)).read()
提前谢谢你你不能通过命令行传递这么大的字符串!您必须将数据保存到文件中,并将其路径传递到csvsql
导入csv
csvstr=df.to_csv()
将open('my_cool_df.csv','w',newline='')作为csvfile:
csvwriter=csv.writer(csvfile)
csvwriter.writerows(csvstr)
后来:
我已经可以这样做了,并使用“to_csv('file/path')将数据帧直接写入csv。我真的很想传递一个字符串,这样我就可以接收其他数据源,并使过程更高效。您认为我可以用这种方式传递字符串吗?老实说,我不确定。请参阅将STDIN传递给csvkit的语法。stdin频道不同于参数列表,我认为你不应该达到极限。不过,我会测试性能,我不确定Python是否能比简单地保存和加载文件更快地处理这个问题。
a=os.popen("csvsql -i postgresql my_cool_df.csv")