f.readline()不捕获文件的最后一行

时间:2019-08-16 03:46:22

标签: python python-3.x text

我正在使用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']
['']

3 个答案:

答案 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