2013-03-30 2 views
0

수천 개의 파일 폴더가 있습니다. 각 파일의 파일 이름을 다른 배열의 열과 일치시켜야합니다.os.walk() 결과 유형

import os 

filenames = [] 
for files in os.walk("Directory"): 
    filenames.append(files) 

이제 디렉토리에있는 모든 파일 이름의 튜플을 갖게되었습니다. 이제 원하는 것은 튜플의 각 요소를 연결하고이를 새 배열에 추가하는 것입니다.

나는 오류가
files = [] 
for i in filenames: 
    files.append(i[2:7]) 

: 내 코드는 다음과 유사 "AttributeError가 :. '튜플'개체가 어떤 속성을 '추가'를이 없습니다" 여기에서 검색 한 후에 조인과 같은 다른 명령을 시도했습니다. 파일 이름을 목록으로 변환하려고했습니다. 그것은 전체 파일 이름의 배열을 반환,

filenames[0] 

첫 번째 문자열 결과를 얻을 것으로 예상 :

심지어 내가 좋아하는 뭔가 말할 때. 이 주위에 어떤 방법이 있습니까?

도움 주셔서 감사합니다. root, dirs, files

문서 here

당신은 파일 이름에 따라 분할을 달성하기 위해 지능형리스트를 사용할 수 있습니다

+0

잘'os.walk'는 3 개의 튜플을 생성합니다. 여기 왜 오류가 발생했는지 찾아보십시오. http://docs.python.org/2/library/os.html#os.walk – squiguy

+0

for 루프에서 os.walk 파일 만 요청하면 더 이상 3-tuple에 있지 않을 것입니다. –

답변

1

os.walk는 3 튜플을 반환합니다. 람다 함수 익명 함수이다 :

filenames = reduce(lambda x,y: x+y, [files for root, dirs, files in os.walk('.')]) 
files = [name[2:7] for name in filenames] 

여기에 설명된다. 너는 아무것도 반환하지 않는다. 정의에는 반환되는 표현식이 포함됩니다. 이것은 동적으로 생성 된 데이터를 처리 할 때 강력합니다.

reduce() a.k.a "작업자 기능"은 두 개의 인수를 허용합니다. 이 함수는 목록의 첫 번째 두 요소를 사용하여 호출 된 다음 세 번째 요소 등을 사용하여 호출됩니다. 반환 값은 단일 목록입니다.

이 온라인에서는 많은 문서가 있습니다.

+0

@CalderEthan 편집이 필요한지 확인하십시오. 하나의 통합 목록을 허용해도됩니까? – karthikr

+0

그게 내가해야 할 일이야. 정말 고맙습니다. 전에 lambda 나 reduce 메소드를 사용하지 않았으므로 여러 가지를 설명해 주시겠습니까? –

+0

정말 고마워요! 그들에 관해 계속 읽게 될 것입니다. 당신은 큰 도움이되었습니다! –

1

실제로 파일 이름에 경로를 포함시켜야하며 목록 표현식을 사용하여이 경로가 유용하다는 것을 알았습니다. 이것이 도움이 되었기 때문에 전체 경로 목록을 제공하는 솔루션을 추가하려고했습니다.

onlyfiles = reduce(lambda x,y : x+y, [map(lambda x: root + "/" + x, files) for root, dirs, files in os.walk(mypath)])