[英]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.