繁体   English   中英

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

[英]Python gzip - extracting .csv.gz file - memory error

我尝试编写一个脚本来从 ftp 服务器访问 .csv.gz 文件,并将内容写入同一台服务器上的 .csv 文件。 只要文件小于 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()

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

尝试这样的事情(对不起,未经测试):

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM