我通过迭代我无法解释的文件来获取行为。
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
怎么回事?
答案 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
不打印整行,我怀疑\t
中23456
和134567.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]