簡體   English   中英

根據文件名將文件組織到文件夾中

[英]Organizing files into folders based on filename

我正在嘗試創建一個程序,以讀取pdf文件(例如,files.pdf),按名稱將其分離,然后將其移動到其相關的文件夾(基於名稱),如下所示:

Files:
house.pdf
house_blue.pdf
road.pdf

Folders:
house = house.pdf, house_blue.pdf
road  = road.pdf

現在我的代碼:

for f in os.listdir():
    file_name, file_ext = os.path.splitext(f)
    if len(file_name.split('_')) == 2:
        f_name, f_course = file_name.split('_')
    elif len(file_name.split('_')) != 2:
        f_name = file_name

def movefile (file_name):
    new_dir =  src + "/" + file_name
    for file_name in os.listdir():
        if not os.path.exists(new_dir):
            os.mkdir(new_dir)
        if file_name.startswith(file_name):
            shutil.move(src+"/"+file_name, new_dir)

它工作正常,唯一的問題是for語句僅生成最后一個pdf文件,僅創建一個文件夾並將所有文件復制到該文件夾​​。

有人可以在錯誤地方幫助我嗎?

提前致謝。

編輯:代碼工作:

src = (os.getcwd())

for f in os.walk(src):
    for f in os.listdir(src):
        if os.path.isfile(src): #Checar se possui arquivos dentro da   pasta(src).
            continue
        lfolders = os.listdir(src) #Atribuir na variavel lfolders todos os diretórios na pasta (src).
        file_name, file_ext = os.path.splitext(f) #separar nome da extensão (.pdf)
        if len(file_name.split('_')) == 2: #se possuir dois nomes (nome e curso)
            f_name, f_course = file_name.split('_')
            try:
                if f_name not in lfolders:
                    for dirmake in os.listdir(src):
                        os.makedirs(os.path.join(src, f_name))
                elif f_name in lfolders:
                    shutil.move(f, src+"/"+f_name)
            except OSError:
                pass

        elif len(file_name.split(')')) != 2: #se possuir um nome (nome)
            f_name = file_name
            try:
                if f_name not in lfolders:
                    for dirmake in os.listdir(src):
                        os.makedirs(os.path.join(src, f_name))
                elif f_name in lfolders:
                    shutil.move(f, src+"/"+f_name)
            except OSError:
                pass

如果我理解正確,則需要為循環的每次迭代做一些事情

for f in os.listdir():
    file_name, file_ext = os.path.splitext(f)
    if file_ext == 'pdf':
        if len(file_name.split('_')) == 2:
            folder, f_course = file_name.split('_')
        elif len(file_name.split('_')) != 2:
            folder = file_name
    print("Ready to move {} into folder {}".format(file_name, folder)) 
    movefile(f, folder)  # Call your function, add a parameter for the folder

暫無
暫無

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

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