如何在python中使用If-else条件检查文件是否存在?

如何在python中使用If-else条件检查文件是否存在?,python,Python,我是python新手,尝试运行以下代码,以使用if-else语句在当前路径上获取指定格式的文件 from pathlib import Path path=Path() for file in path.glob('*.txt'): if file.exists(): print(file) else: print("No items match your search") 它通过打印与给定文件格式匹配的所有文件,适用于if条件。但不适用于其

我是python新手,尝试运行以下代码,以使用if-else语句在当前路径上获取指定格式的文件

from pathlib import Path

path=Path()
for file in path.glob('*.txt'):
    if file.exists():
        print(file)
    else:
        print("No items match your search")

它通过打印与给定文件格式匹配的所有文件,适用于if条件。但不适用于其他条件。我的目的是打印,因为如果指定格式的文件不存在,则没有与您的搜索匹配的项目。 有人能帮助使这段代码正常运行吗?提前谢谢

for file in path.glob('*.txt')
对于glob找到的每个文件,for循环都会运行,因此

for file in path.glob('*.txt'):
    if file.exists():
是毫无意义的,因为文件必须存在,否则glob就不会报告它。您需要检查glob是否返回了任何文件:

filelist = list(path.glob('*.txt'))
if len(filelist) == 0:
    print("No items match your search")
for file in filelist:
    print(file)
对于glob找到的每个文件,for循环都会运行,因此

for file in path.glob('*.txt'):
    if file.exists():
是毫无意义的,因为文件必须存在,否则glob就不会报告它。您需要检查glob是否返回了任何文件:

filelist = list(path.glob('*.txt'))
if len(filelist) == 0:
    print("No items match your search")
for file in filelist:
    print(file)

如果文件是使用path.glob'*.txt'找到的,那么它们必然存在,所以没有理由认为If file.exists的计算结果会为False

检查是否未找到文件的正确方法是检查结果的长度:

from pathlib import Path

path=Path()
result = list(path.glob('*.txt'))
if len(result) == 0:
    print('No items match your search')
else:
    print('Found items that match your search: ', result)

如果文件是使用path.glob'*.txt'找到的,那么它们必然存在,所以没有理由认为If file.exists的计算结果会为False

检查是否未找到文件的正确方法是检查结果的长度:

from pathlib import Path

path=Path()
result = list(path.glob('*.txt'))
if len(result) == 0:
    print('No items match your search')
else:
    print('Found items that match your search: ', result)

我会这样做:

from pathlib import Path

cwd = Path()
files = list(cwd.glob('*.txt'))
if files:
    for file in files:
        print(file)
else:
    print("No items match your search")
与Ofer类似,我将把Path.glob返回的数据转换成一个列表,以便您可以检查它是否包含任何项。生成器函数本身的计算结果始终为True,您只能通过使用next或for循环调用它们来确定它们是否包含任何项

在Python中,空列表的计算结果为False,因此您可以在if语句的条件部分使用if文件。然后我将省略if file.exists:check,因为Path.glob找到的所有文件在运行时都将存在。逻辑的其余部分不应该包含任何意外

或者,如果脚本可能匹配许多文件,并且希望避免在结果列表中一次将所有文件对象加载到内存中的开销,则可以使用标志变量

cwd = Path()
found = False
for file in cwd.glob('*.txt'):
    print(file)
    found = True
if not found:
    print("No items match your search")

我会这样做:

from pathlib import Path

cwd = Path()
files = list(cwd.glob('*.txt'))
if files:
    for file in files:
        print(file)
else:
    print("No items match your search")
与Ofer类似,我将把Path.glob返回的数据转换成一个列表,以便您可以检查它是否包含任何项。生成器函数本身的计算结果始终为True,您只能通过使用next或for循环调用它们来确定它们是否包含任何项

在Python中,空列表的计算结果为False,因此您可以在if语句的条件部分使用if文件。然后我将省略if file.exists:check,因为Path.glob找到的所有文件在运行时都将存在。逻辑的其余部分不应该包含任何意外

或者,如果脚本可能匹配许多文件,并且希望避免在结果列表中一次将所有文件对象加载到内存中的开销,则可以使用标志变量

cwd = Path()
found = False
for file in cwd.glob('*.txt'):
    print(file)
    found = True
if not found:
    print("No items match your search")

如果file.endswith?glob已经迭代了所有现有文件,为什么要再次检查它们是否存在?您应该遍历路径并检查给定文件的扩展名。在你的解决方案中,嗯。。。假设您获取txt文件列表,然后检查这些文件是否为文件并执行代码“否则”将永远不会被执行。使用os.walkif file.endswith?glob已经对所有现有文件进行了迭代,为什么要再次检查它们是否存在?您应该遍历路径并检查给定文件的扩展名。在你的解决方案中,嗯。。。假设您获取txt文件列表,然后检查这些文件是否为文件并执行代码“否则”将永远不会被执行。使用操作系统。谢谢@FlyingTeller但它得到了这个错误TypeError:类型为“generator”的对象没有len@UpaniK那是因为glob返回一个生成器,它必须先转换成一个列表,看看我的答案哦!可以非常感谢您的清楚解释。@agentsmith@OferSadan谢谢您指出,忘了列表谢谢@FlyingTeller但它得到了这个错误TypeError:类型为“generator”的对象没有len@UpaniK那是因为glob返回一个生成器,它必须先转换成一个列表,看看我的答案哦!可以非常感谢您的清晰解释。@agentsmith@OferSadan感谢您指出它,忘记了列表,因此没有理由认为if file.exists的计算结果为False。除非其他程序在全局计算和.exists检查竞争条件之间的瞬间删除该文件。但是,如果这是一个真正的问题,那么需要更多的思考具体的确切要求。@ KalnKuntLee这是真的魔鬼的倡导者:有可能一个或多个文件可能会被删除的另一个过程中的for循环,特别是如果为L
oop包含需要很长时间的操作。@JackTaylor这正是Karl所说的,这是正确的,但这里的目标似乎只是列出/打印结果,以便随时可以更改是的,我在Karl发布之前就开始写我的评论;对不起,重复了!所以没有理由认为if file.exists的计算结果会为False。除非其他程序在全局计算和.exists检查竞争条件之间的瞬间删除该文件。但是,如果这是一个真正的问题,那么需要更多的思考具体的确切要求。@ KalnKuntLee这是真的魔鬼的倡导者:有可能一个或多个文件可能被删除的另一个过程中的for循环,特别是如果for循环包含需要很长时间的操作。@JackTaylor这正是Karl所说的,这是正确的,但这里的目标似乎只是列出/打印结果,以便随时可以更改是的,我在Karl发布之前就开始写我的评论;对不起,重复了!