Python gzip-正在提取.csv.gz文件-内存错误

Python gzip-正在提取.csv.gz文件-内存错误,python,memory,gzip,extraction,memory-efficient,Python,Memory,Gzip,Extraction,Memory Efficient,我试图编写一个脚本,从ftp服务器访问.csv.gz文件,并将内容写入同一服务器上的.csv文件。只要文件小于100mb,这种方法就可以正常工作,超过100mb就会失败,从而导致内存错误。我无法找到一种方法来提取.csv文件,以便它逐行读取文件内容(元组列表)并将其写入新文件 有没有更有效的方法来实现这一点,或者甚至可以直接从.csv.gz文件中提取.csv文件 def gz_unzipper(): hostname = "servername" directory = "pa

我试图编写一个脚本,从ftp服务器访问.csv.gz文件,并将内容写入同一服务器上的.csv文件。只要文件小于100mb,这种方法就可以正常工作,超过100mb就会失败,从而导致内存错误。我无法找到一种方法来提取.csv文件,以便它逐行读取文件内容(元组列表)并将其写入新文件

有没有更有效的方法来实现这一点,或者甚至可以直接从.csv.gz文件中提取.csv文件

def gz_unzipper():

    hostname = "servername"
    directory = "path"
    input_file = directory + "filename.csv.gz"
    output_file = directory + "filename.csv"
    ftp = FTP(hostname)
    ftp.login (username, password)
    ftp.cwd(directory)

    f = gzip.open(input_file, 'r')
    gz_content = f.read()

    lines=csv.reader(StringIO.StringIO(gz_content))

    output_file = open(output_file, 'w')

    for line in lines:
        line  = repr(line)[1:-1]
        line = line.replace("'","")
        line = line.replace(" ","")

        output_file.write(line + "\n") 

    output_file.close  
    f.close()

现在,您正在一次读取整个文件,这对于小文件很好,但是(显然)如果您有大量数据,则会导致问题。由于要逐行处理文件,因此可以使用内置的Python迭代器来处理文件/csvfile。它们通常被实现为惰性的,这意味着它们只在需要时读取数据

尝试类似的方法(抱歉,未经测试):


你能添加一个堆栈跟踪(python输出)来记录它在内存中的位置吗?@Super Nova我的回答对你有帮助吗?
with gzip.open(input_file, 'r') as fin, open(output_file,'w') as fout:
    csv_reader = csv.reader(fin)
    csv_writer = csv.writer(fout)
    csv_writer.writerows(csv_reader)