2013-05-06 44 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") 

希望這對你的作品