pandas 如何根据列值(ID,编号)将文件移动到新目录

cld4siwp  于 2023-10-14  发布在  其他
关注(0)|答案(2)|浏览(107)

我有一个csv文件,文件名在file_name列,站点编号在site_number列。我有一个目录,其中的文件与file_name列中的文件名相匹配,加上扩展名,如. xyz。我有三个独立的目录,我想移动文件名的基础上的ID名称和网站编号。
| 文件名|站点编号|
| --|--|
| 苹果| 1 |
| 葡萄| 1 |
| 梨| 2 |
| 橙子| 3 |
我有一个目录中的所有文件“水果”apple.xyz,grape.xyz,pear.xyz,orange.xyz
我有三个目录,我想移动文件的基础上的网站编号,fruit_1,fruit_2,和fruit_3,我想移动apple.xyz和grape.xyz到fruit_1,梨fruit_2,和橙子fruit_3。
我该怎么做?

bgtovc5b

bgtovc5b1#

用途:

import os, shutil, glob

d = df.set_index('file_name')['site_number']

for file in glob.glob('fruit/*.xyz'):
    base_filename = os.path.basename(file)
    output = f'fruit_{d.get(os.path.splitext(base_filename)[0])}'
    #print (file)
    #print (output)
    shutil.move(file, output)
uqxowvwt

uqxowvwt2#

需要Python 3.4

import pandas as pd
from pathlib import Path

df = pd.DataFrame({
    'file_name': ['apple', 'banana', 'grape'],
    'site_number': [1, 1, 2]})

out = "/Users/my_cool_username/Downloads/so/out"
nm = "fruit"

# create the folders we need
df.apply(lambda x: Path.mkdir(Path(out, nm + "_" + str(x['site_number'])), parents=True, exist_ok=True), axis=1)

# move the folders
df.apply(lambda x: Path(x['file_name'] + '.csv').rename(Path(out, nm + "_" + str(x['site_number']), x['file_name'] + '.csv')), axis=1)

相关问题