Python子进程可以';找不到csv编写器的输出
我正在从Mongo中提取一些数据,通过Python对其进行清理,并将其写入文本文件以导入Vertica。Vertica无法解析python编写的gzip(不知道为什么),因此我尝试将数据写入csv,并使用bash来gzip文件Python子进程可以';找不到csv编写器的输出,python,bash,csv,subprocess,gzip,Python,Bash,Csv,Subprocess,Gzip,我正在从Mongo中提取一些数据,通过Python对其进行清理,并将其写入文本文件以导入Vertica。Vertica无法解析python编写的gzip(不知道为什么),因此我尝试将数据写入csv,并使用bash来gzip文件 csv_filename = '/home/deploy/tablecopy/{0}.csv'.format(vertica_table) with open(csv_filename, 'wb') as csv_file: csv_writer = csv.w
csv_filename = '/home/deploy/tablecopy/{0}.csv'.format(vertica_table)
with open(csv_filename, 'wb') as csv_file:
csv_writer = csv.writer(csv_file, delimiter=',')
for replacement in mongo_object.find():
replacement_id = clean_value(replacement, "_id")
csv_writer.writerow([replacement_id, booking_id, style, added_ts])
subprocess.call(['gzip', 'file', csv_filename])
当我运行这段代码时,我得到了“gzip:file:没有这样的文件或目录”,尽管事实上1)文件是在运行之前立即创建的,2)在运行之前的目录中已经有一个csv副本,因为这是一个反复运行的脚本
这几点让我觉得python以某种方式捆绑了文件,而bash无法查看/访问它。关于如何运行此转换有什么想法吗
谢谢只需传递
csv\u文件名
,gzip正在查找一个名为“file”
的文件,该文件不存在,因此它不会出错为csv\u文件名
文件:
subprocess.call(['gzip', csv_filename])
gzip没有
文件
参数,您只需传递文件名。您已经得到了问题的正确答案。。。。但是,您也可以在编写时使用gzip
模块进行压缩,因此根本不需要调用gzip
程序。本例假设您使用Python3.x,并且只有ascii
文本
import gzip
csv_filename = '/home/deploy/tablecopy/{0}.csv'.format(vertica_table)
with gzip.open(csv_filename + '.gz', 'wt', encoding='ascii', newline='') as csv_file:
csv_writer = csv.writer(csv_file, delimiter=',')
for replacement in mongo_object.find():
replacement_id = clean_value(replacement, "_id")
csv_writer.writerow([replacement_id, booking_id, style, added_ts])
当我使用gzip模块时,vertica无法从文件中读取数据。这是一个独立的问题,可能值得提出自己的问题