2012-07-11 3 views
1

내가 만드는 폴더가 내가 원하는 곳으로 이동하는 데 문제가 있습니다. 주어진 폴더의 각 파일에 대해 새 폴더를 만든 다음 해당 파일을 새 폴더에 저장하려고합니다. 내 문제는 내가 만든 새 폴더가 원하는 디렉터리가 아닌 상위 디렉터리에 저장된다는 것입니다. 내 예 :디렉토리의 각 항목에 대한 폴더를 만드는 방법은 무엇입니까?

def createFolder(): 
    dir_name = 'C:\\Users\\Adrian\\Entertainment\\Coding\\Test Folder' 
    files = os.listdir(dir_name) 
    for i in files: 
     os.mkdir(i) 

해당 디렉토리의 파일이 Hello.txt 및 Goodbye.txt라고 가정 해 봅니다. 스크립트를 실행하면이 파일에 대한 새 폴더가 만들어 지지만 'C : \ Users \ Adrian \ Entertainment \ Coding'에 한 수준 위의 폴더가 만들어집니다.

'C : \ Users \ Adrian \ Entertainment \ Coding \ Test Folder'라는 파일과 동일한 위치에 만들어 지도록하려면 어떻게해야합니까?

+0

를 사용하여 일반 슬래시 (유닉스 영혼와 동일한 방식으로). 파이썬은 그것들을 행복하게 받아 들인다. 그러나 확실히'os.path.join()'과 관련된 함수를 사용하십시오. – pepr

답변

2
import os, shutil 

for i in files: 
    os.mkdir(os.path.join(dir_name , i.split(".")[0])) 
    shutil.copy(os.path.join(dir_name , i), os.path.join(dir_name , i.split(".")[0])) 
2

os.listdir(dir_name)은 파일의 전체 경로가 아닌 파일 이름 만 나열합니다. 파일의 경로를 얻으려면, dir_name로 가입 : Windows의 경우라도 경로의

os.mkdir(os.path.join(dir_name, i)) 
+0

그래서 os.mkdir 행을 제안한대로 변경했지만 이제는 해당 파일이 이미 존재할 때 파일을 만들 수 없다는 오류가 발생합니다. 하나는 폴더이고 다른 하나는 텍스트 파일이기 때문에 동일하지 않습니다. 맞습니까? 어떤 아이디어? 감사. –

+0

@AdrianAndronic 디렉토리 이름과 파일 이름은 겹칠 수 없습니다. (그냥 창 파일 브라우저를 열고 파일과 같은 이름의 디렉토리를 만들거나 그 반대로 만들려고합니다 ... Windows가 그렇게해서는 안됩니다). –

관련 문제