2017-11-02 3 views
1

파일 경로와 파일 이름이 포함 된 문자열 목록을 가져 오려고합니다. 현재 파일 이름 만 목록에 있습니다.파일 경로 + 파일 이름을 목록으로 가져 오는 방법은 무엇입니까?

코드 :

hamFileNames = os.listdir("train_data\ham") 

출력 :이 유사한 출력을 원할 것

['0002.1999-12-13.farmer.ham.txt', 
'0003.1999-12-14.farmer.ham.txt', 
'0005.1999-12-14.farmer.ham.txt'] 

:

['train_data\ham\0002.1999-12-13.farmer.ham.txt', 
'train_data\ham\0003.1999-12-14.farmer.ham.txt', 
'train_data\ham\0005.1999-12-14.farmer.ham.txt'] 

답변

1

방금 ​​할 수있는 디렉토리 경로에 액세스 할 수 있기 때문에 :

dir = "train_data\ham" 
output = map(lambda p: os.path.join(dir, p), os.listdir(dir)) 

또는 간단한 os.path.join가 내부의 파일 이름과 디렉토리 경로를 참여합니다

output = [os.path.join(dir, p) for p in os.listdir(dir)] 

. 이것은 또한 수 있습니다

hamFileNames = [entry.path for entry in os.scandir(r"train_data\ham")] 

:

+0

https://stackoverflow.com/a/11058554/8586227도 참조하십시오. –

0

파이썬 3.5 이상에 있다면, 모두 더 효율적입니다 당신을 위해 일하지 os.listdirin favor of os.scandir, 건너 뛰기 (path는 결과 개체의 속성이다) 당신은 (scandir) 파일을 stat- 파일없이 무료로 몇 가지 파일 정보를 포함하고 있습니다. 파일 만 (아무 디렉토리 또는 특수 파일 시스템 개체) 유지 :

hamFileNames = [entry.path for entry in os.scandir(r"train_data\ham") if entry.is_file()] 

아래 3.4의 경우를, 당신은 이전에 파이썬에서 동일한 API를 제공하는 PyPI scandir 모듈 (보고 할 수 있습니다).

참고 : 경로에 원시 문자열을 사용했습니다. \h이 작동하지 않는 경우 항상은 Windows 경로 리터럴에 원시 문자열을 사용하거나 r"train_data\foo"이 작동하는 동안 "train_data\foo" (은 ASCII 문자 피드 문자 임)을 사용하려고하면 불쾌한 충격을 받게됩니다. (접두사 r은 따옴표 문자 이외의 백 슬래시 삽입을 방지하기 때문에).

관련 문제