繁体   English   中英

Python从gzip压缩文件中读取csv行

[英]Python read csv line from gzipped file

我正在尝试解析gzip压缩的csv文件(其中的字段由|字符分隔),以测试是否直接在Python中读取文件是否比zcat file.gz | python更快zcat file.gz | python zcat file.gz | python在解析内容。

我有以下代码:

#!/usr/bin/python3

import gzip

if __name__ == "__main__": 
    total=0
    count=0

    f=gzip.open('SmallData.DAT.gz', 'r')
    for line in f.readlines():
        split_line = line.split('|')
        total += int(split_line[52])
        count += 1

    print(count, " :: ", total)

但是我收到以下错误:

$ ./PyZip.py 
Traceback (most recent call last):
  File "./PyZip.py", line 11, in <module>
    split_line = line.split('|')
TypeError: a bytes-like object is required, not 'str'

我如何修改它以读取行并正确分割?

我主要对|分隔的第52个字段感兴趣。 输入文件中的行如下所示:

FIELD1 |科研成果|场3 | ... field52 | field53

是否有比我将第52个字段中的所有值求和的方法更快的方法?

谢谢!

您应该先对行进行解码,然后再进行拆分,因为解压缩后的文件将以字节读取:

split_line = line.decode('utf-8').split('|')

您将第52个字段中的所有值相加的代码很好。 没有办法使其更快,因为仅需读取和拆分所有行即可识别每行的第52个字段。

只需尝试将bytes对象解码为字符串即可。

line.decode( 'UTF-8')

更新的脚本:

#!/usr/bin/python3
import gzip

if __name__ == "__main__": 
    total=0
    count=0

    f=gzip.open('SmallData.DAT.gz', 'r')
    for line in f.readlines():
        split_line = line.decode("utf-8").split('|')
         total += int(split_line[52])
         count += 1

    print(count, " :: ", total)

暂无
暂无

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

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