繁体   English   中英

在Python中迭代导入的文本文件的每一行的前几位

[英]Iterating through the first digits in each line of an imported text file in Python

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

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新手。 我究竟做错了什么? 谢谢!

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("[")删除[ ,然后在逗号上split并获取第一个元素。

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

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

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

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

提请参考:Python re doc: https//docs.python.org/2/library/re.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM