标签: fnmatch

使用Glob()在Python中递归查找文件?

这就是我所拥有的:

glob(os.path.join('src','*.c'))
Run Code Online (Sandbox Code Playgroud)

但我想搜索src的子文件夹.像这样的东西会起作用:

glob(os.path.join('src','*.c'))
glob(os.path.join('src','*','*.c'))
glob(os.path.join('src','*','*','*.c'))
glob(os.path.join('src','*','*','*','*.c'))
Run Code Online (Sandbox Code Playgroud)

但这显然是有限和笨重的.

python filesystems glob path fnmatch

676
推荐指数
15
解决办法
59万
查看次数

如何使用Python计算目录中的文件数

我需要使用Python计算目录中的文件数.我想最简单的方法是len(glob.glob('*')),但这也将目录计为文件.

有没有办法只计算目录中的文件?

python glob count fnmatch

196
推荐指数
15
解决办法
29万
查看次数

如何在Python中使用glob.glob模块搜索子文件夹?

我想在文件夹中打开一系列子文件夹,找到一些文本文件并打印一些文本文件行.我用这个:

configfiles = glob.glob('C:/Users/sam/Desktop/file1/*.txt')
Run Code Online (Sandbox Code Playgroud)

但是这也无法访问子文件夹.有谁知道如何使用相同的命令来访问子文件夹?

python filesystems glob fnmatch

96
推荐指数
5
解决办法
15万
查看次数

.gitignore style fnmatch()

使用Python的.gitignore样式fnmatch()最简单的方法是什么?看起来stdlib不提供match()函数,该函数将路径规范与UNIX样式路径正则表达式匹配.

.gitignore具有通配符的路径和文件(黑色)列出

python regex filenames gitignore fnmatch

9
推荐指数
2
解决办法
1929
查看次数

Python,如何实现类似.gitignore行为的东西

我需要列出当前目录(.)中的所有文件(包括所有子目录),并排除一些文件,如.gitignore如何工作(http://git-scm.com/docs/gitignore)

使用fnmatch(https://docs.python.org/2/library/fnmatch.html),我将能够使用模式"过滤"文件

ignore_files = ['*.jpg', 'foo/', 'bar/hello*']
matches = []
for root, dirnames, filenames in os.walk('.'):
  for filename in fnmatch.filter(filenames, '*'):
      matches.append(os.path.join(root, filename))
Run Code Online (Sandbox Code Playgroud)

如何"过滤"并获取与"ignore_files"的一个或多个元素不匹配的所有文件?

谢谢!

python glob pattern-matching gitignore fnmatch

9
推荐指数
1
解决办法
1987
查看次数

pathinfo vs fnmatch

关于fnmatch在pathinfo上的速度有一个小小的争论:如何检查文件是否是php?

我并不完全相信所以决定对两个功能进行基准测试.

使用动态和静态路径显示pathinfo更快.

我的基准逻辑和结论是否有效?

编辑:从cmd使用mac php

PHP 5.3.0(cli)(内置:2009年7月20日13:56:33)版权所有(c)1997-2009 PHP Group Zend Engine v2.3.0,版权所有(c)1998-2009 Zend Technologies

动态路径pathinfo 3.2973630428314 fnmatch 3.4520659446716 x1.05

static path pathinfo 0.86487698554993 fnmatch 1.0420439243317 x1.2

来自cmd的mac xampp php

PHP 5.3.1(cli)(内置:2010年2月27日12:41:51)版权所有(c)1997-2009 PHP Group Zend Engine v2.3.0,版权所有(c)1998-2009 Zend Technologies

动态路径pathinfo 3.63922715187 fnmatch 4.99041700363 x1.37

static path pathinfo 1.03110480309 fnmatch 2.38929820061 x2.32

我在我的机器上包含一个结果样本,以秒为单位进行100,000次迭代:

dynamic path
pathinfo 3.79311800003
fnmatch 5.10071492195
x1.34

static path
pathinfo 1.03921294212
fnmatch 2.37709188461
x2.29
Run Code Online (Sandbox Code Playgroud)

码:

<pre>
<?php

$iterations=100000;

// Benchmark with dynamic file path
print("dynamic path\n"); …
Run Code Online (Sandbox Code Playgroud)

php benchmarking pathinfo fnmatch

7
推荐指数
1
解决办法
1254
查看次数

fnmatch 和递归路径匹配`**`

是否有任何内置或直接的方法来递归匹配双星号的路径,例如像zsh那样?

例如,与

path = 'foo/bar/ham/spam/eggs.py'
Run Code Online (Sandbox Code Playgroud)

我可以使用fnmatch来测试它

fnmatch(path, 'foo/bar/ham/*/*.py'
Run Code Online (Sandbox Code Playgroud)

虽然,我希望能够做到:

fnmatch(path, 'foo/**/*.py')
Run Code Online (Sandbox Code Playgroud)

我知道 fnmatch将其模式映射到 regex,因此在单词的情况下,我可以使用其他**模式滚动我自己的 fnmatch ,但也许有更简单的方法

python glob fnmatch

7
推荐指数
2
解决办法
4470
查看次数

Github分支保护规则,设置分支名称的模式

我正在尝试为我的存储库上的设置分支设置规则,但存在仅适用于特定分支的模式问题。即规则仅适用于brances master、develop、release

问题:该模式没有选取错误的分支

我尝试在这里查看,但它按预期工作 https://ruby-doc.org/core-2.5.1/File.html#method-c-fnmatch

我已经尝试过,但无法使用 0 个分支或所选的所有内容:

{^.*(master).*$,^.*(develop).*$} [master,develop,release] [master;develop;release]*

PS 这个剂量相反,适用于所有支架,但列出的支架: *[!master|!develop|!release]*

github fnmatch

7
推荐指数
1
解决办法
8835
查看次数

.gitignore 文件中的单个 /* 和双 /** 尾随星号有什么区别?

.gitignore考虑文件中的以下两种模式

foo/*
foo/**
Run Code Online (Sandbox Code Playgroud)

模式格式规范指出:

星号*可以匹配除斜杠之外的任何内容。[...]

尾随/**匹配里面的所有内容。例如,abc/**匹配 目录 内的所有文件abc(相对于 .gitignore 文件的位置),具有无限深度。

当在斜杠之后直接在模式末尾使用时,这对我来说听起来是同样的事情。我确实测试了一些案例 - 有或没有下面的子目录foo以及各种否定模式 - 并且没有观察到任何差异。

有没有一种情况会让人做出/**选择/*


起初,我期望看到一个具有如下模式的用例,但没有,因为这两种模式都会忽略内部的所有内容,并且规范还表示“[...]不可能重新包含一个文件(如果该文件的父目录被排除)[...]”

foo/*
!foo/a/b/c/file.txt

foo/**
!foo/a/b/c/file.txt
Run Code Online (Sandbox Code Playgroud)

git gitignore fnmatch

6
推荐指数
1
解决办法
1287
查看次数

还获取与 fnmatch 不匹配的元素

我正在使用递归 glob 来查找文件并将其从一个驱动器复制到另一个驱动器

def recursive_glob(treeroot, pattern):
   results = []
   for base, dirs, files in os.walk(treeroot):

      goodfiles = fnmatch.filter(files, pattern)
      results.extend(os.path.join(base, f) for f in goodfiles)

return results
Run Code Online (Sandbox Code Playgroud)

工作正常。但我还想访问与过滤器不匹配的元素。

有人可以提供一些帮助吗?我可以在循环内构建一个正则表达式,但一定有一个更简单的解决方案,对吧?

python glob recursive-datastructures fnmatch

3
推荐指数
1
解决办法
2347
查看次数

否定 fnmatch 模式

考虑这一模式:*.py。它匹配所有以py扩展名结尾的路径。现在,是否有可能找到与其他所有内容相匹配的模式?

我认为这会做到:*[!.][!p][!y],但显然fnmatch.fnmatch总是False带着这个返回。

我想避免使用正则表达式。我知道我可以使用它们,但在这种情况下这是不可能的。

python glob fnmatch

3
推荐指数
1
解决办法
3850
查看次数

Python:如果指定路径中的文件名包含字符串,则移动到文件夹

这里是 python 新手。我想创建一个脚本来扫描我的目录,如果文件名中包含特定字符串,那么它将自动移动到我选择的文件夹。已经尝试过这个,但没有运气:

import os
import shutil
import fnmatch
import glob

ffe_path = 'E:/FFE'
new_path = 'E:/FFE/Membership/letters'
keyword = 'membership'


os.chdir('E:/FFE/Membership')
os.mkdir('letters')



source_dir = 'E:/FFE'
dest_dir = 'E:/FFE/Membership/letters'

os.chdir(source_dir)

for top, dirs, files in os.walk(source_dir):
    for filename in files:
        if not filename.endswith('.docx'):
            continue
        file_path = os.path.join(top, filename)
        with open(file_path, 'r') as f:
            if '*membership' in f.read():
                shutil.move(file_path, os.path.join(dest_dir, filename))
Run Code Online (Sandbox Code Playgroud)

任何见解将不胜感激。

python shutil python-3.x python-os fnmatch

0
推荐指数
1
解决办法
2万
查看次数