读取文件不是整行

时间:2015-05-13 11:15:22

标签: python file loops

我通过迭代我无法解释的文件来获取行为。

with open("processed.txt", "r") as processed:
    next(processed)
    for row in processed:
        processedList = row.split("\t")
        print processedList
        noi = processedList[0]
        area = processedList[2]

这给了我错误"列表索引超出范围"。 发生错误的print processedList输出是

    [´ 2444´, ´´]

然而,当我进入我的文件processed.txt并检查导致错误的相应行时,我有这个:

2444    13876839.0465   4.5976656692    567919.110661   Dies und Das

怎么回事?

3 个答案:

答案 0 :(得分:0)

$ python processtext.py
['26384   13876839.0465   4.59700590692   637919.110661   Sport und Freizeitanlagen\n']
Traceback (most recent call last):
  File "code.py", line 7, in <module>
    area = processedList[2]
IndexError: list index out of range

在您的代码中,每一行都作为单个元素列表处理。所以processedList [2]自然会引发IndexError

我将其编辑为此。

with open("pr.txt", "r") as processed:
    processed.next()
    for row in processed:

        row = row.split()

        print row
        noi = row[0]
        area = row[2]
        print noi
        print area  

输出

$ python processtext.py
['23456', '134567.678900', '23456.5678909', '4567878.54566', 'Fremd', 'und', 'Geheimnsvoll']
23456
23456.5678909



#pr.txt (2 tabs (1 tab = 2 space))
23456   134567.678900   23456.5678909   4567878.54566   Fremd und Geheimnsvoll

答案 1 :(得分:0)

我只是将您的代码和示例“processed.txt”复制粘贴。 将3个空格更改为选项卡后,它对我运行正常,不会产生错误。 由于print processedList不打印整行,我怀疑\t23456134567.678900之间存在processed.txt以外的内容;也许是\0

答案 2 :(得分:0)

这不是您问题的直接答案,但它看起来很像csv内置模块可以更清洁地执行您想要的操作。

例如:

import csv
with open("processed.txt", "r") as processed:
    csvreader = csv.reader(processed, delimiter='\t')
    for row in csvreader:
        processedList = row
        print processedList
        noi = processedList[0]
        area = processedList[2]