迭代Python列表元素

时间:2017-04-05 14:00:30

标签: python

如何读入包含文本行但我需要在每个元素内迭代的文件?需要在脚本内部访问该文件超出"范围内的"言。

例如,file.txt包含单行" abcdefg"没有引号。如果我编写下面的代码,它就无法工作,因为我相信我在列表中创建了一个元素(即lines = [' abcdefg']:

file = 'file.txt'
with open(file) as file_object:
    lines = file_object.readlines()
for letter in lines:
     if letter == "a":
         print(letter)

我假设这会创建一个" abcdefg"的单个元素。内线当然不会等于" a"。

我可以通过将列表转换为字符串来解决这个问题:

{snip}
text_file_string = ''.join(lines)
for letter in text_file_string:
    if letter == "a":
        print(letter)

这确实有效。我想我真正的问题是,有没有更好的方法来实现这一目标?这似乎是一个迂回的方法,使它成为一个列表,然后是一个字符串。我想我可以直接将它导入一个字符串并跳过将它列为一个列表。我只是想知道我是否可以想要它作为一个列表?

4 个答案:

答案 0 :(得分:2)

您所寻找的似乎是.read(),而不是.readlines().readlines返回一行数组。您希望将整个文件作为字符串,因此.read()

file = 'file.txt'
with open(file) as file_object:
    content = file_object.read()
    for letter in content:
         if letter == "a":
             print(letter)

答案 1 :(得分:0)

线上的循环一次给你一行。循环一行以一次获得一个字符:

file = 'file.txt'
with open(file) as file_object:
    lines = file_object.readlines()
for line in lines:
    for letter in line:
        if letter == "a":
             print(letter)

答案 2 :(得分:0)

你需要嵌套第二个for循环。

file = 'file.txt'
with open(file) as file_object:
    lines = file_object.readlines()
for line in lines:
    for letter in line:
        if letter == "a":
            print(letter)

答案 3 :(得分:0)

与其他所有人同意,但另外还有一项建议。文件对象是可迭代的。您可以利用这样的事实使您的代码更简单。

with open("myfile.txt", "rt") as file_ob:
    for line in file_ob:
        for letter in line:
            if letter == "a":
                print(letter)