用(大部分)数字读取文件

时间:2016-02-12 02:58:12

标签: python python-2.7 file parsing split

格式为:

0
995

112
// there is an empty line here too

所以,我在做:

with open("in.txt") as f:
    articles = f.readlines()
for article in articles:
    article = int(article.split()[0])

但我得到了:

  

IndexError:列表索引超出范围

我认为

来自访问没有数字的行的[0]。如何找到(我很有兴趣识别空行,因为这意味着收集当前列表应该停止并为下一个列表做好准备)。

print articles
['0 \n', '995 \n', '\n', '112 \n', '\n']

3 个答案:

答案 0 :(得分:3)

with open(in.txt) as f:
    articles = [int(line) for line in f.read().splitlines() if line]

如果您使用splitlines代替readlines,则会删除\n字符,因此您只需要检查空字符串

此外,我需要使用上面使用的列表解析将结果存储在articles变量中。按照您的方式,每次都会覆盖article变量而不会保存任何内容。

要分隔多个列表中的块,请执行以下操作:

with open(in.txt) as f:
    article = []
    articles = [article]
    for line in f:
        line = line.strip()
        if not line:
            article = []
            articles.append(article)
            continue
        article.append(int(line))

答案 1 :(得分:3)

我建议这样做:

numbers = []
with open('in.txt', 'r') as f:
     for line in f:
          line = line.split()
          try:
               numbers.append(int(line[0]))
          except IndexError as e:
               pass
print numbers

答案 2 :(得分:1)

在尝试访问其中的元素之前,您需要检查您的分割是否返回了一些内容。

temp = article.split()
if temp: #returns false if temp == []
    article = int(article.split()[0])