我正在使用readline()从一个很大的文本文件中读取。该文件的长度为几百万行。但是,无论如何,我都不会捕获文件的最后一行。
我正在读取的文件如下所示:
$ tail file.txt
22 rs1193135566 0 50807787 C G 0 0 0 0 NA 0 0 0 NA NA 0
22 rs1349597430 0 50807793 T G 0 0 0 0 0 0 0 NA NA NA NA
22 rs1230501076 0 50807799 T G 0 0 NA NA 0 0 0 NA 0 NA 0
22 22_50807803 0 50807803 C G 0 0 0 0 0 0 0 0 0 NA 0
22 rs1488400844 0 50807810 G T 0 0 0 NA 0 0 0 0 0 NA 0
22 rs1279244475 0 50807811 G T 0 0 0 NA 0 0 0 0 0 NA 0
22 rs1346432135 0 50807812 G A 0 NA 0 0 0 0 0 0 0 NA 0
22 rs1340490361 0 50807813 C G 0 0 0 NA 0 0 0 0 0 NA 0
22 22_50807816 0 50807816 G T 0 0 0 NA 0 0 0 0 0 NA 0
22 rs1412997563 0 50807818 G C 0 0 0 NA 0 0 0 0 0 NA 0
我的代码如下:
with open('/path/file.txt', 'r') as f:
for l in f:
line = l.rstrip('\n').split("\t")
print(line)
文件的最后一行显示为空[]
。
输出看起来像这样:
['22', 'rs1250150067', '0', '50807769', 'G', 'A', 'NA', '0', '0', '0', '0', '0', '0', '0', '0', 'NA', '0']
['22', 'rs1193135566', '0', '50807787', 'C', 'G', '0', '0', '0', '0', 'NA', '0', '0', '0', 'NA', 'NA', '0']
['22', 'rs1230501076', '0', '50807799', 'T', 'G', '0', '0', 'NA', 'NA', '0', '0', '0', 'NA', '0', 'NA', '0']
['22', 'rs1488400844', '0', '50807810', 'G', 'T', '0', '0', '0', 'NA', '0', '0', '0', '0', '0', 'NA', '0']
['22', 'rs1346432135', '0', '50807812', 'G', 'A', '0', 'NA', '0', '0', '0', '0', '0', '0', '0', 'NA', '0']
['22', '22_50807816', '0', '50807816', 'G', 'T', '0', '0', '0', 'NA', '0', '0', '0', '0', '0', 'NA', '0']
['']
答案 0 :(得分:1)
您仅读取一行,请尝试使用f.readlines()代替,它将读取所有行。如果您希望逐行使用,请使用下标。
lines = f.readlines()
print(lines[0]) # to display 1st line
print(lines[1]) # to display 2nd line
以此类推。阅读后,您还可以循环打印行,例如
lines = f.readlines()
for line in lines:
print(line)
编辑1: 它显示在您提供的输出中,就像您的循环没有读取所有行一样,因为在输出中仅显示从末尾开始的第二,第四,第六行。
也请尝试使用strip()而不是rstrip('\ n'),因为这会在字符串的两侧都剥离空白。
答案 1 :(得分:0)
我认为您正在寻找这样的东西:
with open('/path/file.txt', 'r') as f:
for lines in f.readlines():
line = lines.rstrip('\n').split("\t")
print(line)
答案 2 :(得分:0)
您要丢弃其他所有行。
for line in f
已将一行读入line
。然后,您将其丢弃,并使用line = f.readline()
获取另一行。我的Python 3.5.1实际上警告并中止了:
ValueError: Mixing iteration and read methods would lose data
您可以一次将所有行读入内存,或一次处理一行。我通常建议使用后者,除非您的处理需要最后将所有数据存储在内存中(即使那样,您可能仍需要将其解析为合理的结构,因此将原始数据保留在内存中只是浪费)。
with open('/path/file.txt', 'r') as f:
for line in f:
print(line.rstrip('\n').split('\t')) # or process line