我想根据python数据框上的某些值在python中移动一些文件。
我的脚本已经创建了必要的文件夹和子文件夹,但是我想将文件(df中的每一行是文件/文档)移动到那些文件夹/子文件夹。
我有4列(doc_id,文件路径,colA,colB和colC)
如您所见,我拥有每个文档的路径。我能够创建文件夹,但是我希望脚本自动移动(例如):
所以在文件夹value1中,我们将有3个子文件夹-> value8,value11和value14
谢谢
答案 0 :(得分:2)
我想您在值的末尾没有定界符\或/,所以如果没有,请改用解决方案:
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)
答案 1 :(得分:2)
这是一种应在每个操作系统上使用的解决方案(假设已创建所有目标文件夹):
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)