相关疑难解决方法(0)

将CSV文件拆分成相等的部分?

我有一个大的CSV文件,我想分成一个等于系统中CPU核心数的数字.我想然后使用多进程让所有核心一起处理文件.但是,我甚至无法将文件拆分成部分.我看了整整一遍google,我发现了一些看似符合我想要的示例代码.这是我到目前为止:

def split(infilename, num_cpus=multiprocessing.cpu_count()):
    READ_BUFFER = 2**13
    total_file_size = os.path.getsize(infilename)
    print total_file_size
    files = list()
    with open(infilename, 'rb') as infile:
        for i in xrange(num_cpus):
            files.append(tempfile.TemporaryFile())
            this_file_size = 0
            while this_file_size < 1.0 * total_file_size / num_cpus:
                files[-1].write(infile.read(READ_BUFFER))
                this_file_size += READ_BUFFER
        files[-1].write(infile.readline()) # get the possible remainder
        files[-1].seek(0, 0)
    return files

files = split("sample_simple.csv")
print len(files)

for ifile in files:
    reader = csv.reader(ifile)
    for row in reader:
        print row
Run Code Online (Sandbox Code Playgroud)

这两个打印显示正确的文件大小,它被分成4个部分(我的系统有4个CPU内核).

但是,打印每个部分中所有行的代码的最后一部分给出了错误:

for row in reader:
_csv.Error: line contains NULL byte
Run Code Online (Sandbox Code Playgroud)

我尝试打印行而不运行split函数,它正确打印所有值.我怀疑split函数在生成的4个文件中添加了一些NULL字节,但我不确定原因. …

python csv null byte split

2
推荐指数
1
解决办法
3090
查看次数

标签 统计

byte ×1

csv ×1

null ×1

python ×1

split ×1