2013-05-06 69 views
0

我想要遍历几个目录,每个目录都包含一个名为GDS_XYZ/GDS_XYZ.summary.txt的文件。 XYZ从文件夹更改到文件夹,所以我做Python glob失败?

glob.glob('GDS_*/GDS*.summary.txt') 

然而,结果是['GDS_0744-2358/GDS*.summary.txt']而不是['GDS_0744-2358/GDS_0744-2358.summary.txt']

谁能告诉我这是为什么和我能做些什么呢?据我所见,glob需要多个通配符... 谢谢!

+2

结果应该是一个清单,你缺少一个括号。不幸的是,除非你给我们一些我们可以重现的东西,否则这个问题将很难解决。 – mgilson 2013-05-06 14:31:35

回答

1

当我将其他解决方案带入桌子时,人们讨厌我。 但是考虑:

import os 
for root, folders, files in os.walk('./'): 
    if os.path.basename(root)[:4] == 'GDS_': 
     print('Checking: ' + root) 
     for f_name in files: 
       if f_name[:3] == 'GDS': 
        print('\t' + f_name) 

它将recursivly检查./下一个文件夹结构,看它是否站在文件夹命名为GDS_*,如果是这样,检查所有文件在它GDS*。 然后它将遍历下一个文件夹,依此类推。

+0

这是非常丑陋的,但感谢模板:) – frixhax 2013-05-06 17:14:26

+0

我一直是块上的丑陋的孩子,但当我躲在一个棚子时,我解决了很多问题:)不客气,作为最后的手段它会:) :) – Torxed 2013-05-06 17:46:19

0

也许是因为我做很多的两个bash和Python的东西,但我更喜欢通过SH模块使用shell的水珠功能:

import sh 
sh.glob('what*ever/some*thing') 

如果有使用Python和bash水珠功能的任何差异我不需要知道,因为我只是使用shell。

+0

'sh.glob'只是'glob.glob'('def glob(s):return glob.glob(s)或s')*的一个非常简单的* wrapper。这对于我不认为的OP来说没有太大的区别。 – mgilson 2013-05-06 15:56:18

+0

不起作用,谢谢 – frixhax 2013-05-06 17:13:54

+0

@mgilson - heh。谢谢。从这里的评论https://github.com/amoffat/sh/blob/master/sh.py#L190它看起来像他们这样做,如果没有匹配,glob不扩大。 – underrun 2013-05-06 17:15:50

-1

我不好,伙计们。迭代错误的目录。现在一切正常,因为它应该。

0

您可以使用Formic(披露:我是作者)。甲不正是你所期望的水珠,其中包括一个(或多个)目录:

import formic 
fileset = formic.FileSet(include="GDS_*/GDS*.summary.txt") 

for file_name in fileset: 
    # Do something with file_name 

甲酸开始其默认搜索当前工作目录。您也可以使用命名参数directory到别处开始:

fileset = formic.FileSet(include="GDS_*/GDS*.summary.txt", directory="/some/where/else") 

希望这对你的作品