使用python

时间:2017-12-22 10:50:09

标签: python csv bigdata

我有一个大约100 GB的.csv文件,并希望用python 3.5.4将其拆分为1 GB文件(用于记录:))。

我在下面写了split_csv('filename.csv')函数。

我的问题是如何让它更快。这是必要的,因为我将定期拆分巨大的.csv文件的新版本。

备注(包含编辑):

  • 我想在磁盘上执行此操作。它不适合RAM。
  • 1GB .csv文件应该在行结束的地方拆分。所以他们将“约”1GB。不完全是。

    导入操作系统 将pandas导入为pd 导入csv 进口时间

    def split_csv(file,filesize = 1000,header ='T'):     start = time.time()

    with open(file, 'r', encoding='utf8', newline='') as infile:
        datareader = csv.reader(infile)
    
        outfile_iterator=100001
        outfilename = file.split('.')[0]
        outfilename = outfilename+'_'+str(outfile_iterator)+'.csv'
        o = open(outfilename, 'w',newline='')
        outfile = csv.writer(o, delimiter=',', lineterminator="\r\n")
        print('writing to ',outfilename)
    
        total_row_count=0
        row_count = 0
        for row in datareader:
            if header=='T' and total_row_count==0:
                header_row=row
                print('header: ',header_row)
            outfile.writerow(row)
            row_count = row_count + 1
            total_row_count=total_row_count+1
            if os.stat(outfilename).st_size > (filesize*1048576) :
                print('rowcount: ',row_count)
                row_count = 0
                o.close()
                outfile_iterator = outfile_iterator + 1
                outfilename = file.split('.')[0]
                outfilename = outfilename+'_'+str(outfile_iterator)+'.csv'
                o = open(outfilename, 'w',newline='')
                outfile = csv.writer(o, delimiter=',', lineterminator="\r\n")
                print('writing to ',outfilename)
                if header=='T':
                    outfile.writerow(header_row)
                    print('header: ',header_row)
    
    print('rowcount: ',row_count)
    infile.close()
    o.close()
    
    elapsed = (time.time() - start)
    print(elapsed, " seconds")
    

1 个答案:

答案 0 :(得分:-1)

使用file.read(size)将从您的文件中读取size个字节。

使用file.readline()将只读取文件中的一行而不加载整个文件。

如果您只想创建1GB块,请使用第一块。

如果要创建大约1GB大小的.csv文件,请使用第二个文件并在每次写入时计算输出文件的大小。