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文件本身。理想情况下,我想要指挥的是:
我确信我要求的是一件相当直截了当的事情,但我不知道如何进行。可能值得我强调的是,我通过反复试验获得了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表达式匹配的名称(文件或文件夹)。