使用大型(1.7gig)csv文件在python中清理数据

使用大型(1.7gig)csv文件在python中清理数据,python,csv,memory,bigdata,Python,Csv,Memory,Bigdata,我正在尝试使用python进行一些数据清理。我有一些大的(1-2gigs)csv文件,我想按某些属性(例如日期、时间)进行排序,然后输出另一个csv文件和此信息,以便能够在excel中使用 当我遍历这些行时,我遇到了一些大内存问题。最初,我使用的是一个32位的空闲设备,它不会运行我的代码,然后切换到64位Spyder。现在代码运行,但在第一个迭代行停止(似乎正在处理,内存已消耗,但在过去半小时内还没有看到它继续运行) 我的代码如下。该过程在第10行(突出显示)处停止。我对python非常陌生,所

我正在尝试使用python进行一些数据清理。我有一些大的
(1-2gigs)csv
文件,我想按某些属性(例如日期、时间)进行排序,然后输出另一个
csv
文件和此信息,以便能够在excel中使用

当我遍历这些行时,我遇到了一些大内存问题。最初,我使用的是一个32位的空闲设备,它不会运行我的代码,然后切换到
64位Spyder
。现在代码运行,但在第一个迭代行停止(似乎正在处理,内存已消耗,但在过去半小时内还没有看到它继续运行)

我的代码如下。该过程在第10行(突出显示)处停止。我对python非常陌生,所以我确信我的代码非常原始,但这是我能做到的最好的了!提前感谢您的帮助:)


如果不需要将整个文件内容保存在内存中,只需处理每一行并立即将其写入输出文件即可。另外,在您的示例中,您解析了CSV,然后再次生成CSV,但您似乎没有使用解析的数据。如果这是正确的,您可以简单地执行以下操作:

def file_converter(infilename, outfilename):
    with open(infilename, 'rt') as infile, open(outfilename, "w") as outfile:  
        for line in infile:
            line.replace(' ', '').replace('/2013', ',')
            outfile.write(line)
如果函数
trip\u dateroute()
用于过滤实际应该写出的行,您也可以添加该函数,但是您实际上必须解析CSV:

def filter_row(row, date, route):
    return str(row[1]) == date and str(row[3]) == route

def cleanup(field):
    return field.replace(' ', '').replace('/2013', ',')

def file_converter(infilename, outfilename, date, route):
    with open(infilename, 'rt') as infile, open(outfilename, "w") as outfile:
        reader = csv.reader(infile, delimiter=',', quotechar='|')
        writer = csv.writer(outfile, delimiter=',', quotechar='|', lineterminator='\n')
        for row in reader:
            row = [cleanup(field) for field in row if filter_row(row, date, route)]
            writer.writerow(row)
def filter_row(row, date, route):
    return str(row[1]) == date and str(row[3]) == route

def cleanup(field):
    return field.replace(' ', '').replace('/2013', ',')

def file_converter(infilename, outfilename, date, route):
    with open(infilename, 'rt') as infile, open(outfilename, "w") as outfile:
        reader = csv.reader(infile, delimiter=',', quotechar='|')
        writer = csv.writer(outfile, delimiter=',', quotechar='|', lineterminator='\n')
        for row in reader:
            row = [cleanup(field) for field in row if filter_row(row, date, route)]
            writer.writerow(row)