2011-12-16 3 views
12

나는 정말이 문제에 난처합니다.첫 번째 결과 만 반환하는 파이썬의 glob

import glob 

for found in glob.glob(filename): 
    if not os.path.isdir(found): 
    my_module.do_stuff(found) 

filenamesys.argv에서 읽은 :

은 내가 이렇게 보이는 간단한 파이썬 래퍼가 있습니다.

대화 형 셸 또는 hello world 스크립트에서 glob을 시도하면 (이 경우 5 개의) 전체 파일 목록이 표시됩니다. 그러나, 나는이 문맥에서 그것을 사용할 때, 나는 오직 하나만 (사전 순으로) 얻는다.

배열에서 glob.glob의 결과를 포착하여 확인한 결과, 파일 이름이 '*' 인 경우에도 len()은 1뿐입니다.

내가 무엇을 할 수 있겠습니까? glob!

전체 코드 파일, 당신이 내 잡았다 자리 수 있습니다 단지의 경우 : 파이썬 스크립트를보기 전에

#! /usr/bin/python 
import pynet.quadrons as q 
import os, glob 

def print_usage(): 
    print """ 
    (blah blah big long string.) 

    """ 

if __name__ == "__main__": 
    import sys 
    if len(sys.argv) < 2: 
    print_usage() 
    exit() 

    filename = '' 

    try: 
    filename = sys.argv[1] 
    except: 
    print "error parsing arguments." 
    print_usage() 
    exit() 

    for found in glob.glob(filename): 
    if not os.path.isdir(found): 
     q.load_and_analyse_file(found) 
+2

당신이 샘플'sys.argv'를 게시 할 수 있습니까? – Blender

+0

샘플을 게시하십시오 : 사용하지 않는 폴더 내용과 패턴을 표시하십시오. – gecco

답변

14

쉘은 글로브을 확대하고있다. 따라서 파이썬 스크립트는 sys.argv[1]에 glob과 일치하는 첫 번째 전체 파일 이름을 확인하고 그 파일을 glob()으로 전달합니다. 물론 하나의 파일 만 일치시킵니다.

작은 따옴표로 셸에서 인수를 인용하여 셸에서 확장하지 않도록하거나 셸에서 확장을 수행하고 sys.argv (첫 번째 항목 제외)의 모든 항목을 반복하도록 허용하십시오.

는 스크립트가 크로스 플랫폼을 작동 할 필요가있는 경우, 그래서 글 로빙하지 않습니다 쉘, 당신은 이상 sys.argv[1:]각 항목 glob에 반복해야, Windows에서 점에 유의하는 가치입니다.

+0

감사합니다. 정확히 무슨 일이 일어나고 있는지 :) – tehwalrus

1

디버깅 101 : print len(sys.argv[1:]), repr(sys.argv[1:])

하나 이상의 파일 이름 및/또는 하나 개 이상의 패턴에 대한 취사 :

for pattern in sys.argv[1:]: 
    for filename in glob.glob(pattern): 
     do_something_with(filename) 
관련 문제