如何在python中读取tsv.gz文件的前几行



如何在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

最新更新