Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 迭代子目录中的文本文件_Python_Loops - Fatal编程技术网

Python 迭代子目录中的文本文件

Python 迭代子目录中的文本文件,python,loops,Python,Loops,如何仅在目录中迭代文本文件?到目前为止,我所拥有的是 for file in glob.glob('*'): f = open(file) text = f.read() f.close() 这是可行的,但是我必须将.py文件存储在同一个目录(文件夹)中才能运行它,因此迭代包含了.py文件本身。理想情况下,我想要指挥的是: 查看此子目录/文件夹,并遍历其中的所有文件 或者 “查看此目录中的所有文件,并迭代那些扩展名为.txt的文件” 我确信我要求的是一件相当直截了当的事

如何仅在目录中迭代文本文件?到目前为止,我所拥有的是

for file in glob.glob('*'):
    f = open(file)
    text = f.read()
    f.close()
这是可行的,但是我必须将.py文件存储在同一个目录(文件夹)中才能运行它,因此迭代包含了.py文件本身。理想情况下,我想要指挥的是:

  • 查看此子目录/文件夹,并遍历其中的所有文件
  • 或者

  • “查看此目录中的所有文件,并迭代那些扩展名为.txt的文件”

  • 我确信我要求的是一件相当直截了当的事情,但我不知道如何进行。可能值得我强调的是,我通过反复试验获得了glob模块,因此,如果这是一种错误的方法,请随时纠正我!谢谢。

    解决方案非常简单

    for file in glob.glob('*'):
        if not file.endswith('.txt'):
            continue
        f = open(file)
        text = f.read()
        f.close()
    

    glob.glob
    函数实际上将一个globbing模式作为其参数。 例如,
    “*.txt”
    同时匹配名称以
    .txt
    结尾的文件

    以下是如何使用它:

    for file in glob.glob("*.txt"):
        f = open(file)
        text = f.read()
        f.close()
    
    但是,如果您想排除某些特定文件,例如
    .py
    文件,globbing的语法并不直接支持这一点

    在这种情况下,您需要获取这些文件,并手动排除它们:

    pythonFiles = glob.glob("*.py")
    otherFiles = [f for f in glob.glob("*") if f not in pythonFiles]
    
    glob.glob()
    使用与标准类unix shell相同的通配符模式匹配。该模式可用于过滤扩展,当然:

    # this will list all ".py" files in the current directory
    # (
    >>> glob.glob("*.py")
    ['__init__.py', 'manage.py', 'fabfile.py', 'fixmig.py']
    
    但它也可用于探索给定路径,相对:

    >>> glob.glob("../*")
    ['../etc', '../docs', '../setup.sh', '../tools', '../project', '../bin', '../pylint.html', '../sql']
    
    或绝对:

    >>> glob.glob("/home/bruno/Bureau/mailgun/*")
    ['/home/bruno/Bureau/mailgun/Domains_ Verify - Mailgun.html', '/home/bruno/Bureau/mailgun/Domains_ Verify - Mailgun_files']
    
    当然,你可以同时做这两件事:

    >>> glob.glob("/home/bruno/Bureau/*.pdf")
    ['/home/bruno/Bureau/marvin.pdf', '/home/bruno/Bureau/24-pages.pdf', '/home/bruno/Bureau/alice-in-wonderland.pdf']
    

    如果你想找到所有扩展名为.txt的文件,那么这个链接可能对你很有用——你说得对,简单得令人沮丧!谢谢你花时间回复。@DC_Liv不用担心。作为解决此类问题的一般技巧,在Python3中,可以使用制表符补全来查找变量提供的所有成员函数。将具有代表性的文件名分配给
    x
    ,然后在解释器提示下仅按tab键
    x
    。这应该列出
    str
    的所有方法,其中之一是
    endswith
    。标准库中的大多数函数的命名都非常好。如果您不确定某件事的作用,则
    帮助(x.endswith)
    通常会提供解释。这也是一个完整的WTF-glob的全部目的是避免此类测试,并直接获取与glob表达式匹配的名称(文件或文件夹)。