See*_*You 6 glob hidden-files python-3.x
我尝试遍历与某个扩展名匹配的所有文件,包括隐藏文件夹中的文件。到目前为止,我还没有找到使用iglob的方法。这适用于除以点开头的所有文件夹之外的所有文件夹:
import glob
for filename in glob.iglob('/path/**/*.ext', recursive=True):
print(filename)
Run Code Online (Sandbox Code Playgroud)
我试图将点添加为可选字符无济于事。我真的很想使用glob而不是驻留在os.walk上
我有同样的问题,并希望 glob.glob 有一个可选参数来包含点文件。我希望能够在所有目录中包含所有点文件,包括以点开头的目录。使用 glob.glob 无法做到这一点。但是我发现 Python 有 pathlib 标准模块,它有一个以不同方式运行的 glob 函数,它将包含点文件。该函数的操作略有不同,特别是它不返回字符串列表,而是返回路径对象。但是我使用了以下内容
files=[]
file_refs = pathlib.Path(".").glob(pattern)
for file in file_refs:
files.append(str(file))
Run Code Online (Sandbox Code Playgroud)
我发现的另一个显着差异是以 ** 结尾的全局模式。这在 pathlib 版本中没有返回任何内容,但会返回 glob.glob 中的所有文件。为了获得相同的结果,我添加了一行来检查模式是否以 ** 结尾,如果是,则将 /* 附加到它。
以下代码替换了您的示例,其中包含以点开头的目录中的文件
import pathlib
for fileref in pathlib.Path('/path/').glob('**/*.ext'):
filename = str(fileref)
print(filename)
Run Code Online (Sandbox Code Playgroud)
小智 6
从 python 3.11 开始,可以执行以下操作:
glob.iglob('/path/*', include_hidden=True)
Run Code Online (Sandbox Code Playgroud)
来自https://docs.python.org/3/library/glob.html
请注意,与 fnmatch.fnmatch() 不同,glob 将以点 (.) 开头的文件名视为特殊情况
如果目录包含以 . 默认情况下它们不会匹配。例如,考虑一个包含 card.gif 和 .card.gif 的目录:
Run Code Online (Sandbox Code Playgroud)import glob glob.glob('*.gif') # ['card.gif'] glob.glob('.c*') # ['.card.gif']
从我看来,它需要两个单独的 glob 来获取隐藏和非隐藏的 glob,例如使用/sf/answers/338039131/。
添加赏金问题的答案;在单个命令中获取隐藏和非隐藏文件的结果。
\n正如 @reducidng 活动提到的, glob 对待 . 文件作为特殊用例。要在单个循环中同时获取常规文件和隐藏文件,我们可以itertools.chain使用glob.iglob器。例如,
\xe2\x86\x92 ls -A\n.chen file.text so1.py\n\n>>> import glob, itertools\n>>> for i in itertools.chain(glob.iglob('**'), glob.iglob('.**')):\n... print(i)\n...\nfile.text\nso1.py\n.chen\n\n# If you want it as a variable, you can list() it.\n>>> l = list(itertools.chain(glob.iglob('**'), glob.iglob('.**')))\n>>> l\n['file.text', 'so1.py', '.chen']\n>>>\nRun Code Online (Sandbox Code Playgroud)\n注意:它还不能完全工作。假设你有.hello, .dot/hello.txt, .dot/.hello.txt, nodot/hello.txt,nodot/.hello.txt您那么两者都不是:
itertools.chain(glob.iglob('**', recursive=True), glob.iglob('.**', recursive=True))\nRun Code Online (Sandbox Code Playgroud)\n也不
\nitertools.chain(glob.iglob('**/*', recursive=True), glob.iglob('.**/*', recursive=True))\nRun Code Online (Sandbox Code Playgroud)\n给出所有文件。
\n| 归档时间: |
|
| 查看次数: |
2014 次 |
| 最近记录: |