迭代子目录中的文本文件

时间:2018-03-22 15:06:24

标签: python loops

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

for file in glob.glob('*'):
    f = open(file)
    text = f.read()
    f.close()

这是有效的,但我必须将我的.py文件存储在同一目录(文件夹)中才能运行它,因此迭代包含.py文件本身。理想情况下,我想要命令的是;

  1. "查看此子目录/文件夹,并遍历其中的所有文件"
  2. ... OR

    1. "浏览此目录中的所有文件,并使用.txt扩展名"
    2. 进行迭代

      我确定我要求一些相当直接的东西,但我不知道如何继续。它可能值得我强调,我通过试验和错误得到了glob模块,所以如果这是错误的方法绕过这个特定的方法随时纠正我!感谢。

3 个答案:

答案 0 :(得分:3)

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

以下是如何使用它:

for file in glob.glob("*.txt"):
    f = open(file)
    text = f.read()
    f.close()

如果您想要排除某些特定文件,比如说.py个文件,那么globbing的语法不会直接支持这个文件,如here所述。

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

pythonFiles = glob.glob("*.py")
otherFiles = [f for f in glob.glob("*") if f not in pythonFiles]

答案 1 :(得分:1)

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']

答案 2 :(得分:-1)

解决方案非常简单。

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