2014-03-02 2 views
1

내 랩톱에 파일 세트가 저장되어 있습니다. 폴더 구조는 다음과 같습니다.os.walk로 파일 경로 찾기

Part1(folder) 
Part1(subfolder) 
    awards_1990 (subfolder) 
    awards_1990_00 (subfolder) 
     (files) 
    awards_1990_01 
     (files) 
     ... 
     ... 
     ... 
    awards_1991 
    awards_1991_01 
     (files) 
    awards_1991_01 
    awards_1991_01 
    ... 
    ... 
    ... 
    awards_1992 
    ... 
    ... 
    ... 
    awards_1993 
    ... 
    ... 
    ... 
    awards_1994 
    ... 
    ... 
    ... 

그래서 os.walk를 사용하여 파일 경로 목록을 추출하려고합니다. 내가 가지고있는 코드는 다음과 같습니다.

import os 
matches=[] 
for root, dirnames, dirname in os.walk('E:\\Grad\\LIS\\LIS590 Text mining\\Part1\\Part1'): 
    for dirname in dirnames: 
     for filename in dirname: 
       if filename.endswith(('.txt','.html','.pdf')): 
      matches.append(os.path.join(root,filename)) 

일치하는 항목을 호출하면 []가 반환됩니다.

import os 
dirnames=os.listdir('E:\\Grad\\LIS\\LIS590 Text mining\\Part1\\Part1') 
for filenames in dirnames: 
    for filename in filenames: 
     path=os.path.join(filename) 
     print (os.path.abspath(path)) 

이 하나가 나를 나에게이 결과를 제공합니다 :

C:\Python32\a 
C:\Python32\w 
C:\Python32\a 
C:\Python32\r 
C:\Python32\d 
C:\Python32\s 
C:\Python32\_ 
C:\Python32\1 
... 

이 오류에 의하면

나는 다른 코드를 시도했다. 어떤 생각을 가지고이 일을해야할까요?

+0

endswith는 하나의 항목 만 허용합니다 ... –

+0

여러 항목으로 사용하기 전에 잘 작동했습니다. –

+0

...하지만 찾을 항목 집합을 수락합니다. – Nabla

답변

0

for filename in dirname: 개별 문자를 열거 : 접미사는 하나 이상의 접미사가있는 경우을, 그렇다면, 당신이 그들 주위에 괄호가 필요합니다 [[최종] 시작] in dirname문자열. 보십시오 : 당신은 여기 dirnames으로 for -loop 필요하지 않습니다

#!/usr/bin/env python 
import os 

topdir = r'E:\Grad\LIS\LIS590 Text mining\Part1\Part1' 
matches = [] 
for root, dirnames, filenames in os.walk(topdir): 
    for filename in filenames: 
     if filename.endswith(('.txt','.html','.pdf')): 
      matches.append(os.path.join(root, filename)) 
print("\n".join(matches)) 

.

+0

고맙습니다. 이 코드를 실행하려고하면 Python이 계속 죽어 가고 있습니다. Windows와의 코드 문제 또는 파이썬 호환성입니까? 나는 여전히 Windows Vista (32 비트) OS를 실행 중입니다. 설치 경로는 c :/Python32입니다. 그것은 전에도 작동했는데 ... –

+0

@ Q-ximi : 당신은'topdir' 변수를 정의하려 했습니까? "계속 죽어가는"것은별로 유익하지 않습니다. 명령 행에서 실행하고 전체 추적을 게시하십시오. – jfs

+0

좋아, 방금 topdir을 정의하려고 시도했지만, 이제는 ERROR13을 부여하고 있습니다. 권한이 거부되었습니다.코드는 다음과 같습니다 :'import os os의 root, dirnames, filenames에 대해 root = open (r'E : \ Grad \ LIS \ LIS590 텍스트 마이닝 \ Part1 ','r ') 와 일치합니다. (root, filename) matches.append (os.path.join (root, filename)) : 파일 이름에 walk (root) :filename.endswith) ' –

3

기능 endswith 소요 :

if filename.endswith(('.txt','.html','.pdf')): 
+0

여전히 작동하지 않습니다. 게시물에서 내 코드를 업데이트했습니다. –

+0

디렉토리 트리에서 파일을 탐색하려면 다음과 같이 사용할 수 있습니다. '루트, dirs, os.walk (최상위 디렉토리)의 파일 : 파일의 파일 : filename = os.path.abspath (os.path .join (root, file))' –

+0

os.walk (topdirectory)에있는 루트, dirs, 파일에 대해 시도했다 : 파일 내의 파일에 대해 : filename = os.path.abspath (os.path.join (root, file))'. 마지막 파일 만 줬어. –