如何仅在目录中迭代文本文件?到目前为止我所拥有的是什么;
for file in glob.glob('*'):
f = open(file)
text = f.read()
f.close()
这是有效的,但我必须将我的.py文件存储在同一目录(文件夹)中才能运行它,因此迭代包含.py文件本身。理想情况下,我想要命令的是;
... OR
我确定我要求一些相当直接的东西,但我不知道如何继续。它可能值得我强调,我通过试验和错误得到了glob模块,所以如果这是错误的方法绕过这个特定的方法随时纠正我!感谢。
答案 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()