2017-01-26 2 views
1

정규식을 사용하여 폴더의 특정 파일을 식별하고 다른 폴더로 이동시키는 스크립트 (Python 2.7)를 작성하려고합니다. 그러나 스크립트를 실행하면 소스 폴더가 그 안에있는 파일 대신 대상 폴더로 이동됩니다.특정 파일을 한 폴더에서 다른 폴더로 이동하는 Python 스크립트

import os, shutil, re 

src = "C:\\Users\\****\\Desktop\\test1\\" 
#src = os.path.join('C:', os.sep, 'Users','****','Desktop','test1\\') 
dst = "C:\\Users\\****\\Desktop\\test2\\" 
#dst = os.path.join('C:', os.sep, 'Users','****','Desktop','test2') 

files = os.listdir(src) 
#regexCtask = "CTASK" 
print files 
#regex =re.compile(r'(?<=CTASK:)') 


files.sort() 

#print src, dst 

regex = re.compile('CTASK*') 

for f in files: 
    if regex.match(f): 
     filescr= os.path.join(src, files) 
     shutil.move(filesrc,dst) 
     #shutil.move(src,dst) 

그래서 기본적으로 내가 "TEST2"로 이동하려는 "TEST1"폴더에있는 파일 수 있지만 모든 파일의 시작 부분에 "CTASK"를 포함 그냥 사람이있다.

경로에있는 **** 내 작품의 이름을 보호하는 것입니다.

미안하지만 지저분한 경우 몇 가지 시도를하고 있습니다.

+1

코드 아래' os.path.join (src, files)'는 예외를 생성해야합니다. (소스의 모든 파일이 "CTAS"와 0 이상의 "K"문자로 시작한다고 가정 할 때 실제로 찾고자하는 것이 아닙니다.) – glibdud

답변

1

는 각 루프 반복에 filescr 변수에 정확한 파일 (f)에 경로를 할당 할 필요가 있지만 경로 files (files - 한 list입니다!)

시도

import os 
from os import path 
import shutil 

src = "C:\\Users\\****\\Desktop\\test1\\" 
dst = "C:\\Users\\****\\Desktop\\test2\\" 

files = [i for i in os.listdir(src) if i.startswith("CTASK") and path.isfile(path.join(src, i))] 
for f in files: 
    shutil.copy(path.join(src, f), dst) 
+0

훌륭합니다. 이 경우에 경로 모듈이 무엇을하는지 정확히 설명해 주시겠습니까? – R2DeeTard

+1

'path.join()'은'path_to_folder' +'file_name' ='path_to_file'에 사용되었습니다. 'path.isfile()'-'listdir (src)'의 항목이 파일이긴하지만 폴더가 아니라는 것을 확인하기 위해서 - 필요하다면이 조건을 제거 할 수도 있습니다. – Andersson

+0

한 가지 더 빠른 질문. 이 파일을 단지 파일 대신 폴더에 어떻게 적용 할 수 있습니까? 편집 : neverimind. path.isdir()이 필요한 것입니다. – R2DeeTard

관련 문제