当我从Python执行Linux split file命令时,文件被分割了,但数据被截断了



我正试图根据Python中的行数执行Linux文件拆分命令。以下是代码

cmd = 'split -a 4 --verbose --lines 1000 --additional-suffix=.csv master.csv split_file_'
p = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
p.stdin.close()
print "Stdout:", p.stdout.read()
print "Stderr:", p.stderr.read()

当我尝试在Linux中直接执行该命令时,我会得到正确生成的文件。但当从Python执行时,我遇到了问题。

假设我在master.csv中有2001条记录,我得到了两个文件,一个文件中有1000行,另一个文件有756行。甚至第二个文件中最后一行的数据也被截断。

假设我在master.csv中有1001条记录,我得到了一个文件,其中一个文件中有756行,即使最后一行的数据被截断了。

我正在使用python2.7

Popen有一个最大缓冲区大小。可以使用bufsize进行调整,但不推荐使用。

您最好将文件写入磁盘并将其读取到脚本中,或者自己在python 中实现拆分功能

经过几次挣扎和谷歌搜索,我设法解决了这个问题。

我的实现只是从linux命令行执行.py文件因此,当直接执行.py文件时,.py内部的linux命令(split(失败/部分执行。

所以为了解决这个问题,我将split file命令移到了shell脚本中,然后只从shell脚本中调用py文件。

#!/bin/bash
python pythonfile1.py
split -a 4 --verbose --lines 50000 --additional-suffix=.csv csvfiles/master.csv csvfiles/split/split_file_
python pythonfile1.py

不是实际问题的完美解决方案,但只是解决我的问题的替代方案

最新更新