![](/img/trans.png)
[英]Python 3.4.3: Iterating over each line and each character in each line in a text file
[英]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
第三种选择使用lstrip
和split
:
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.