簡體   English   中英

Python根據名稱移動文件

[英]Python Move Files Based On Name

值得稱贊的是,我當前正在使用的代碼來自cji的響應

我試圖遞歸地從源文件夾中拉出所有文件,並將它們從文件名前五個字符0:5移到文件夾中

我的以下代碼:

import os
import shutil

srcpath = "SOURCE"
srcfiles = os.listdir(srcpath)

destpath = "DESTINATION"

# extract the three letters from filenames and filter out duplicates
destdirs = list(set([filename[0:5] for filename in srcfiles]))


def create(dirname, destpath):
    full_path = os.path.join(destpath, dirname)
    os.mkdir(full_path)
    return full_path

def move(filename, dirpath):
    shutil.move(os.path.join(srcpath, filename)
                ,dirpath)

# create destination directories and store their names along with full paths
targets = [(folder, create(folder, destpath)) for folder in destdirs]

for dirname, full_path in targets:
    for filename in srcfiles:
        if dirname == filename[0:5]:
            move(filename, full_path)

現在,使用下面的代碼更改srcfiles = os.listdir(srcpath)destdirs = list(set([filename[0:5] for filename in srcfiles])) 可以為我提供一個變量的路徑以及變量的前五個字符文件名中的另一個。

srcfiles = []
destdirs = []

for root, subFolders, files in os.walk(srcpath):
    for file in files:
       srcfiles.append(os.path.join(root,file))
    for name in files:
       destdirs.append(list(set([name[0:5] for file in srcfiles])))

我將如何修改原始代碼以使用此代碼...或者如果有人對我將如何執行此操作有更好的想法。 謝謝。

我無法真正輕松地對其進行測試,但是我認為這段代碼應該可以工作:

import os
import shutil

srcpath = "SOURCE"
destpath = "DESTINATION"

for root, subFolders, files in os.walk(srcpath):
    for file in files:
        subFolder = os.path.join(destpath, file[:5])
        if not os.path.isdir(subFolder):
            os.makedirs(subFolder)
        shutil.move(os.path.join(root, file), subFolder)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM