복붙노트

[PYTHON] 와일드 카드를 사용하여 파일 검색

PYTHON

와일드 카드를 사용하여 파일 검색

와일드 카드로 검색 패턴을 가진 파일 이름 목록을 얻고 싶습니다. 처럼:

getFilenames.py c:\PathToFolder\*
getFilenames.py c:\PathToFolder\FileType*.txt
getFilenames.py c:\PathToFolder\FileTypeA.txt

어떻게해야합니까?

해결법

  1. ==============================

    1.이렇게 :

    이렇게 :

    >>> import glob
    >>> glob.glob('./[0-9].*')
    ['./1.gif', './2.txt']
    >>> glob.glob('*.gif')
    ['1.gif', 'card.gif']
    >>> glob.glob('?.gif')
    ['1.gif']
    

    이것은 바로 여기에서옵니다 : http://docs.python.org/library/glob.html

  2. ==============================

    2.glob는 파이썬 안에서이 일을하는 경우에 유용하지만 쉘이 * (나는 윈도우 쉘에 익숙하지 않다)에서 전달하지 않을 수도있다.

    glob는 파이썬 안에서이 일을하는 경우에 유용하지만 쉘이 * (나는 윈도우 쉘에 익숙하지 않다)에서 전달하지 않을 수도있다.

    예를 들어, 다음과 같이하면 :

    import sys
    print sys.argv
    

    내 셸에 입력 한 :

    $ python test.py *.jpg
    

    나는 이것을 얻는다 :

    ['test.py', 'test.jpg', 'wasp.jpg']
    

    argv에는 "* .jpg"가 포함되지 않습니다.

    여기서 중요한 교훈은 대부분의 셸이 응용 프로그램에 전달되기 전에 셸에서 별표를 확장한다는 것입니다.

    이 경우 파일 목록을 얻으려면 sys.argv [1 :]를 사용합니다. 또는 파이썬이 리터럴 *을 볼 수 있도록 *를 이스케이프 할 수도 있습니다. 그런 다음 glob 모듈을 사용할 수 있습니다.

    $ getFileNames.py "*.jpg"
    

    또는

    $ getFileNames.py \*.jpg
    
  3. ==============================

    3.

    from glob import glob
    import sys
    
    files = glob(sys.argv[1])
    
  4. ==============================

    4.스크립트를 여러 쉘에서 사용할 수 있고 *를 사용하여 여러 매개 변수로 작업 할 때 매우 유용하다는 것을 알았 기 때문에 이전에 추가했습니다.

    스크립트를 여러 쉘에서 사용할 수 있고 *를 사용하여 여러 매개 변수로 작업 할 때 매우 유용하다는 것을 알았 기 때문에 이전에 추가했습니다.

    모든 쉘에서 작동하는 무언가를 원하면 다음을 수행 할 수 있습니다 (여전히 glob을 사용합니다).

    >>> import glob
    >>> from functools import reduce # if using python 3+
    >>> reduce(lambda r, x: r + glob.glob(x), sys.argv[1:], [])
    

    그것은 중복을 생성 할 수 있습니다 (테스트 파일을 가지고 있고 t *와 te *를 제공한다면), 집합을 사용하여 간단히 제거 할 수 있습니다 :

    >>> set(reduce(lambda r, x: r + glob.glob(x), sys.argv[1:], []))
    
  5. from https://stackoverflow.com/questions/3348753/search-for-a-file-using-a-wildcard by cc-by-sa and MIT license