1

我需要从数据框生成 postgres 模式。我发现 csvkit 库最适合匹配数据类型。我可以通过 docs 中的以下命令通过终端在我的桌面上的 csv 上运行 csvkit 并生成 postgres 模式:

csvsql -i postgresql myFile.csv 

csvkit 文档 - https://csvkit.readthedocs.io/en/stable/scripts/csvsql.html

我可以通过以下代码在我的脚本中运行终端命令:

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到代码行中a=os.popen("csvsql -i postgresql csvstr").read()

我尝试执行以下代码行但出现错误OSError: [Errno 7] Argument list too long: '/bin/sh'

a=os.popen("csvsql -i postgresql {}".format(csvstr)).read()

先感谢您

4

1 回答 1

2

你不能通过命令行传递这么大的字符串!您必须将数据保存到文件并将其路径传递给csvsql.

import csv

csvstr = df.to_csv()
with open('my_cool_df.csv', 'w', newline='') as csvfile:
    csvwriter= csv.writer(csvfile)
    csvwriter.writerows(csvstr)

然后:

a=os.popen("csvsql -i postgresql my_cool_df.csv")
于 2018-07-15T14:06:05.990 回答