перемещение отдельных 230 файлов PDF в уже созданные папки - PullRequest
0 голосов
/ 10 апреля 2019

@ nmnh Я пытаюсь переместить более 200 pdf-файлов, каждый в отдельные папки, которые уже созданы и имеют имя 2018. Путь назначения для каждого из них, как-GFG-0777 >> 2018.Каждый файл PDF имеет уникальное имя GFG-0 ###, которое соответствует папкам, которые я уже создал, которые ведут к папкам назначения 2018 года.Не уверен, как перебрать и получить каждый pdf-файл в нужную папку ....: /

Я пробовал shutil.move, который я считаю лучшим, но у меня проблемы с путями.

import os
import shutil


srcDir = r'C:\Complete'
#print (srcDir)
dstDir = r'C:\Python27\end_dir'
dirList = os.listdir(srcDir)
for f in dirList:
    fp = [f for f in dirList if ".pdf" in f] #list comprehension to iterate task (flat for loop)
for file in fp:
    dst = (srcDir+"/"+file[:-4]+"/"+dstDir+"/"+"2018")
    shutil.move(os.path.join(srcDir, dst, dstDir))         

ошибка: shutil.move (os.path.join (srcDir, dst, dstDir)) TypeError: move () отсутствует 1 обязательный позиционный аргумент: 'dst'

Ответы [ 2 ]

0 голосов
/ 11 апреля 2019

@ nmanh Мне удалось решить это. Спасибо, что назвали проблему, чтобы создать строку с src и dst. После удаления строки я немного подправил, но обнаружил, что в коде слишком много «файлов». Мне пришлось сделать два из них «file1» и добавить запятую в shutil.move между src и dst. Еще раз спасибо

import os
import shutil


srcDir = r'C:\Complete'
#print (srcDir)
dstDir = r'C:\Python27\end_dir'
dirList = os.listdir(srcDir)
for file in dirList:
    fp = [f for f in dirList if ".pdf" in f] #list comprehension to iterate task 
    (flat for loop)
for file in fp:
    if ' ' in file: #removing space in some of pdf names noticed during fp print
    file1 = file.split(' ')[0]# removing space continued
else:
    file1 = file[:-4]# removing .pdf
    final = dstDir+"\\"+file1+"\\2018"
    print (srcDir+"\\"+file1+" "+final)
shutil.move(srcDir+"\\"+file,final)
0 голосов
/ 10 апреля 2019

AFAICT вы звоните shutil.move(os.path.join(srcDir, dst, dstDir)) без to. Согласно документации, у вас должна быть папка from и to. https://docs.python.org/3/library/shutil.html#shutil.move

Полагаю, ваша идея состояла в том, чтобы как-то создать строку, содержащую dst и src:

dst = (srcDir+"/"+file[:-4]+"/"+dstDir+"/"+"2018")

Что вы на самом деле хотите, так это что-то вроде:

dst_dir = dstDir+"/"+"2018"
src_dir = srcDir+"/"+file[:-4]
shutil.move(src_dir,dst_dir)

Выше код только для демонстрации. Если это не сработает, вы можете tree или ls -la привести небольшую часть ваших srcdir и dstdir, и мы сможем что-то придумать.

...