为特定子目录中的所有.php文件爬网Unix

2024-03-28 12:32:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试获取unix服务器上任何子目录中遵循以下模式的所有php文件:

./*/www/p3/
./*/www/P3/
./*/www/p3[some letters after a variation on p3 and P3]/

php文件也可能位于这些文件的其他子目录中。你知道吗

我试过两种不同的方法:

fls = glob.glob('./*/www/[a-z][3]/*')
fls.extend(glob.glob('./*/www/[a-z][3]/*/*'))
fls.extend(glob.glob('./*/www/[a-z][3]/*/*/*'))

这也恰好包含了另一个我不想要的目录 (“/*/www/h3”,每个子目录都有)

我也试过:

import os
import fnmatch
matches = []
for root, dirnames, filenames in os.walk('./'):
    for filename in fnmatch.filter(filenames, '*.php'):
            matches.append(os.path.join(root, filename))

它返回子目录中所有php文件。你知道吗

这两种方法都是一个好的开始吗?我应该尝试另一种匹配文件名的方法吗?你知道吗


Tags: 文件方法importforoswwwrootglob
1条回答
网友
1楼 · 发布于 2024-03-28 12:32:35

如我所说,您可以使用glob.globos.walk选择顶级目录

for top in glob.glob('./*/www/[pP]3*'):
    for root, dirnames, filenames in os.walk(top):
        for filename in fnmatch.filter(filenames, '*.php'):
                matches.append(os.path.join(root, filename))

或者可以使用fnmatch来确保找到的php文件位于所需位置:

for root, dirnames, filenames in os.walk('./'):
    if not fnmatch.fnmatch(root, './*/www/[pP]3*'):
        continue    
    for filename in fnmatch.filter(filenames, '*.php'):
            matches.append(os.path.join(root, filename))

第一种方法比第二种方法需要更少的文件系统操作。你知道吗

相关问题 更多 >