如何在python中读取tsv.gz文件的前几行?我写了以下几行:
import gzip
with gzip.open('HELLO.tsv.gz', 'rb') as f:
tsv_file = f.read()
read_tsv = csv.reader(tsv_file, delimiter="t")
number_of_lines = 10
for i in range(number_of_lines):
line = read_tsv.readline()
print(line)
然而,它带来了错误:
name 'csv' is not defined
谢谢你的帮助。
csv
没有readline()
,文档也没有使用名称line
,而是使用row
如果你想把line
当作string
,那么你可以直接用
import gzip
with gzip.open('HELLO.tsv.gz', 'rb') as f:
for i in range(number_of_lines):
line = f.readline()
print(i, line)
如果您希望line
作为list of values
(row of data
(,则可以使用next()
从csv
获取下一个row
with gzip.open('hello.tsv.gz', 'rb') as f:
data = f.read().decode()
#print('--- data ---')
#print(data)
#print('---')
tsv_reader = csv.reader(data, delimiter="t")
number_of_lines = 10
for i in range(number_of_lines):
row = next(tsv_reader)
print(i, row)
您也可以使用list(...)[:10]
将其作为行列表
with gzip.open('hello.tsv.gz', 'rb') as f:
data = f.read().decode()
#print('--- data ---')
#print(data)
#print('---')
tsv_reader = csv.reader(data, delimiter="t")
number_of_lines = 10
rows = list(tsv_reader)[:number_of_lines]
print(rows)
编辑:
原始版本有一个问题——它使用read()
将所有文件读取到内存中,并且只获得几个起始行是无用的。
我发现gzip
可以使用模式rt
将解码的行提供给string
,然后你不必使用read().decode()
,你可以直接在cvs.reader()
中使用f
,只读取几行而不读取整个文件。
with gzip.open('hello.tsv.gz', 'rt') as f:
tsv_reader = csv.reader(f, delimiter="t")
number_of_lines = 10
for i in range(number_of_lines):
row = next(tsv_reader)
print(i, row)
文档:csv,gzip