Перемещение файлов в несколько мест назначения - PullRequest
0 голосов
/ 31 августа 2018

Я пытаюсь переместить файлы в папке пути в несколько целевых каталогов. Итак, мое состояние - 70 процентов файлов для перемещения в dest1 и 30 процентов в dest2. То, что я пробовал до сих пор, дает мне некоторую ошибку. Я не уверен, что логика неверна или как это сделать. Пожалуйста, опубликуйте свое решение или идеи. Спасибо

Код:

import os
import shutil
import random
from shutil import copyfile
path="/Users/kj/Downloads/spam_classifier-master2/data2/data"
dest1="/Users/kj/Downloads/test"
dest2="/Users/kj/Downloads/train"


files=os.listdir(path)
for f in files:
    if (len(f) >0.7 ):
        shutil.move(f,dest2)
    elif (len(f)<0.3):
        shutil.move(f,dest1)

Ошибка:

Traceback (most recent call last):
  File "/usr/local/Cellar/python/3.6.5/Frameworks/Python.framework/Versions/3.6/lib/python3.6/shutil.py", line 544, in move
    os.rename(src, real_dst)
FileNotFoundError: [Errno 2] No such file or directory: 'mail0.txt' -> '/Users/kj/Downloads/train'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/kj/Downloads/ef.py", line 13, in <module>
    shutil.move(f,dest2)
  File "/usr/local/Cellar/python/3.6.5/Frameworks/Python.framework/Versions/3.6/lib/python3.6/shutil.py", line 558, in move
    copy_function(src, real_dst)
  File "/usr/local/Cellar/python/3.6.5/Frameworks/Python.framework/Versions/3.6/lib/python3.6/shutil.py", line 257, in copy2
    copyfile(src, dst, follow_symlinks=follow_symlinks)
  File "/usr/local/Cellar/python/3.6.5/Frameworks/Python.framework/Versions/3.6/lib/python3.6/shutil.py", line 120, in copyfile
    with open(src, 'rb') as fsrc:
FileNotFoundError: [Errno 2] No such file or directory: 'mail0.txt'

1 Ответ

0 голосов
/ 31 августа 2018

os.listdir возвращает только имена файлов по заданному пути, поэтому, когда вы выполняете действие с именем файла, вы должны сначала объединить имя файла с путем, чтобы получить полный путь. Также вы должны разделить номер файла на длину списка файлов, чтобы получить правильное соотношение:

files=os.listdir(path)
for i, f in enumerate(files):
    if (i + 1) / len(files) > 0.7:
        shutil.move(os.path.join(path, f),dest2)
    else:
        shutil.move(os.path.join(path, f),dest1)
...