переместить файлы Python в соответствии со значениями столбцов - PullRequest
0 голосов
/ 25 февраля 2019

Я хотел бы переместить некоторые файлы в python в соответствии с некоторыми значениями в кадре данных python.

Мой сценарий уже создает необходимые папки и подпапки, но я хочу переместить файлы (каждая строка в моей df являетсяфайл / документ) в эти папки / подпапки.

У меня есть 4 столбца (doc_id, путь к файлу, colA, colB и colC) my df

КакВы можете видеть, что у меня есть путь для каждого документа.Мне удалось создать папки, но я хочу, чтобы мой сценарий автоматически перемещался (например):

  • doc1 в папку с именем value1, которая содержит подпапку с именем value8, которая содержит подпапку с именем othervalues1
  • etc ...

Итак, в папке value1 у нас будет 3 подпапки -> value8, value11 и value14

Спасибо

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

Вот решение, которое должно работать на каждой ОС (при условии, что все папки назначения уже созданы):

import os
import shutil
import pandas as pd

for _, row in df.iterrows():
    # Assuming filename is included in paths column
    # Otherwise, the filename should be added to new_path
    # and the shutil.move
    new_path = os.path.join(
        row['colA'], row['colB'], row['colC'],
        os.path.basename(row['paths'])
    )

    shutil.move(row['paths'], new_path)
0 голосов
/ 25 февраля 2019

Полагаю, у вас нет разделителей \ или / в конце ваших значений, поэтому, если нет, вы адаптируете решение:

import pandas as pd
import shutil

def move(src, dest):
    shutil.move(src, dest)

df = pd.DataFrame({'doc_id': [1, 2, 3,4,5,6,7,8],
                   'paths': ['path1', 'path2', 'path3', 'path4', 'path5', 'path6', 'path7', 'path8'],
                   'colA': ['value1', 'value2', 'value3', 'value1', 'value2', 'value3', 'value1', 'value2'],
                   'colB': ['value8', 'value9', 'value10', 'value11', 'value12', 'value13', 'value14', 'value15'],
                   'colC': ['othervalues1', 'othervalues2', 'othervalues3', 'othervalues4', 'othervalues5', 'othervalues6', 'othervalues7', 'othervalues8']
                   })
#you could use '\\' or '/' for delimiting folder, move calls shutil.move
df.apply(lambda row: move(row['paths'] + '\\doc' + str(row['doc_id']),
                          row['colA'] + '\\' + row['colB'] + '\\' + row['colC'] + '\\' + 'doc' + str(row['doc_id'])), axis=1)
...