0

내 python 스크립트는 .pdf 파일을 다운로드하지만 동적으로 생성 된 이름이있어서 이름을 바꾸고 내가 사용하는 폴더로 이동합니다. 그러나 파이썬이 와일드 카드 그래서이 코드가 작동하지 않는 것 같습니다.os.rename을 사용하여 불확실한 이름의 파일을 이동하는 방법은 무엇입니까?

os.rename('downloads/*.pdf','outputs/' + jpm + '/' + jpm + '-oa.pdf') 

은 또한 shutil.move를 사용하고 내가 당신을 보여하지만 그것은 단지 os.rename 전체 라인에 대해 불평 소스 디렉토리에 대해 불평 한 나에게 유사한 오류를했다.

FileNotFoundError: [Errno 2] No such file or directory: 'downloads/*.pdf' -> 'outputs/JPM0522733/JPM0522733-oa.pdf' 

그럼이 작업을 어떻게 수행 할 수 있습니까?

답변

0

모듈 glob는 와일드 카드에 해당하는 것을 구현합니다. 당신은 당신이 다음 길이가 너무 새로운 연결하기로 len(dfiles)와 동일한 목록을 만들 수 있습니다, 당신은 다른 다운로드 한 파일의 이름을 변경해야 얻을 그래서 그래서

import glob 
dfiles = glob.glob1('downloads','*.pdf') 

처럼, 다운로드 한 파일의 목록을 만들 수 있습니다 그들 각각에게 이름.

당신이 contrario가 python3의 + 아래 can only concatenate list (not "range") to list 오류가 발생할 것이다 , 파이썬 < 세 미만일 경우리스트로 범위를 설정 할 필요가 없음을
jpm = 'JPM0522733' 
nfiles = map(lambda i: '{0}-{1}oa.pdf'.format(jpm,i), 
      ['']+list(range(len(dfiles))) 
     ) 

참고.

병렬로 간주 두 개의 목록을 통해 마지막으로 루프

는, 이름이있는 폴더 "downloads", "outputs"jpm이 존재한다고 가정하면 각각의 pdf 파일

for dfile,nfile in zip(dfiles,nfiles): 
    os.rename( 
     os.path.join('downloads', dfile), 
     os.path.join('outputs', jpm, nfile) 
    ) 

의 이름을 변경합니다. 그렇지 않으면 생성해야합니다.

+0

응답 해 주셔서 감사합니다. 현재이 오류가 발생합니다. [ ''] + range (len (dfiles)) TypeError :리스트를 연결할 수 없습니다 (범위가 아님) – Gdfelt

+0

@Gdfelt. 이것은 python27에서는 가능하지만 python3에서는 가능하지 않습니다. 이 오류는'[ ''] + range (len (dfiles))'행에 의한 것입니다. 나는 새로운 것을 배웠다. 내 업데이트를 참조하십시오. Juste가'[ ''] + list (range (len (dfiles)))로 줄 바꿈)' – Kanak

+0

매력처럼 작동했습니다! 대단히 감사합니다. – Gdfelt