python - 嵌套循环未获得所需的输出

标签 python python-2.7 loops nested

我正在尝试让这个嵌套循环用于更大的程序。这只是我代码的一小部分

我希望我的程序将文件夹中的文件名与文本文档中的文件名进行匹配,如果它们匹配,则执行某些操作。我不知道为什么下面的嵌套循环不起作用。

allGood = open("allGood.txt", "r")
folder = "C:\your\folder\path\here"

for item in allGood:
    for file in os.listdir(folder):

        if file == item:
            print "in item loop" + item
            print "Do a thing"
    print "1 loop completed"

“allGood.txt”的内容

document10080.pdf
document10098.pdf
document10119.pdf
document10172.pdf
document10178.pdf
and so on

问题是当它到达 IF 语句时。它应该每个循环只匹配一次,但事实并非如此。我只得到“1 个循环已完成”的巨大输出

插入 print(file, item) 的输出

('document10486.pdf', 'document10080.pdf\n')
('document10487.pdf', 'document10080.pdf\n')
('document10488.pdf', 'document10080.pdf\n')
('document10489.pdf', 'document10080.pdf\n')
('document1049.pdf', 'document10080.pdf\n')

我现在明白我的问题了

最佳答案

我没有足够的声誉来发表评论,所以我会尝试在信息不足的情况下回答。基本上你永远不会有比赛。这就是您永远不会进入第二个循环的原因。

您是否考虑过将文件名作为集合来处理?

real_files = set(os.listdir(folder))
good_files = set(open("allGood.txt", "r").readlines())

matching_files = good_files.intersection(real_files)
for file in matching_files:
    pass # do something

文本文件条目也可能包含空格;考虑使用“strip”,例如:

import string
...
good_files = set(map(string.strip, open("allGood.txt", "r").readlines()))
...

或少一些“Perl-ish”;-)

...
good_files_raw = open("allGood.txt", "r").readlines()
good_files = set(map(string.strip, good_files_raw))
...

关于python - 嵌套循环未获得所需的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47190488/

相关文章:

python - 在 Python C API 中将新类定义为结构有什么意义

python 2.7 设置和列表删除时间复杂度

python - RabbitMQ pika.exceptions.ConnectionClosed (-1, "error(104, ' 连接被对等方重置')")

javascript - 在循环中动态地将数据推送到对象

javascript - 与 javascript 中的 Array.reduce() 相反

python - 如何使用 Python 进行大规模开发?

python - 如何使用python找出CPU的数量

python - 在 Python 中将键添加到字典或将值附加到列表是否更快?

python - 将所有 stdout/stderr 全局重定向到记录器

c++ - 无需复制和粘贴即可重用嵌套循环