迭代Python中导入的文本文件的每一行中的第一个数字

时间:2014-09-06 23:48:34

标签: python file loops text import

我试图遍历文本文件每行中的第一个数字。这是我的代码:

f = open('test.txt')
for line in iter(f):
    print line[1]
f.close()

这是我尝试迭代的文本文件:

[11, (28, 33, 45, 55, 62, 66)]
[10, (28, 33, 45, 55, 62, 66.69)]
[9, (28, 33, 45, 55, 62, 67)]
[7, (28, 33, 45, 55, 62, 69)]
[6, (28, 33, 45, 55, 62, 69.69)]
[8, (28, 33, 45, 55, 62, 74)]
[11, (28, 33, 45, 55, 62, 75.86)]
[11, (28, 33, 45, 55, 62, 76)]
[12, (28, 33, 45, 55, 62, 76.69)]
[13, (28, 33, 45, 55, 62, 77.86)]

不幸的是,这段代码产生了值1,1,9,7等,而不是我正在寻找的东西(11,10,9,7等)。我是一个Python新手。我究竟做错了什么?谢谢!

3 个答案:

答案 0 :(得分:1)

line = "[11, (28, 33, 45, 55, 62, 66)]"

from ast import literal_eval
print literal_eval(line)[0]
11
代码中的

line[0][line[1]1等。这就是您获取单个字符的原因。

literal_eval会将您的行转换为实际的list,然后您可以像对待任何列表一样对其进行索引,以访问您需要的任何元素。

您还可以使用re搜索\d+一个或多个连续数字:

line = r"[11, (28, 33, 45, 55, 62, 66)]"
import re
print re.findall("\d+",line)[0]
11

第三个选项使用lstripsplit

line = "[11, (28, 33, 45, 55, 62, 66)]"

print line.lstrip("[").split(",")[0]
11

lstrip("[")删除[,我们然后{\}}删除逗号并获取第一个元素。

答案 1 :(得分:0)

现在,每一行都被简单地视为一个字符串,因此,你正在查看每一行的第二个字符(记住第一个字符是0),它只给出第一个数字的第一个数字。

您需要做的是将每一行评估为元素列表而不是字符串,然后第0个元素将是' 11'' 10'等等。

答案 2 :(得分:0)

由于输入文件中的数据格式,我发现Padraic使用eval的答案非常简单明了,但如果你想使用正则表达式:

import re
f = open('test.txt')
for line in iter(f):
    print re.match("\[(\d*)", line).group(1)

for refrence:Python re doc:https://docs.python.org/2/library/re.html