亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

移動文件但重命名(如果存在于 python 中)

移動文件但重命名(如果存在于 python 中)

手掌心 2023-05-09 10:03:19
我正在嘗試在 Windows 中移動我的文件。目前這些文件位于驅動器 C: 下的文件夾中,但我想將它們移動到 D: 中的某個位置。我正在使用 shutil.move 函數,但該函數會覆蓋文件(如果存在)。我想在目的地保留文件的副本而不是覆蓋它。有這樣做的功能嗎?def movefiles(strsrc, strdest, strextension):    filelistsrc = []  #source files full path    # store the destination of the current file    dictfiles = {}    for f in os.listdir(strsrc):        if os.path.isfile(os.path.join(strsrc, f)):            filefullname = os.path.join(strsrc, f)            if filefullname.endswith(".html"):                filelistsrc.append(filefullname)                dictfiles[filefullname] = os.path.join(strdest, f)    if not filelistsrc:        return -1    print("Start moving files from:")    printstrlist(filelistsrc)    for filename in filelistsrc:        shutil.move(filename, dictfiles[filename])    return 0
查看完整描述

3 回答

?
慕尼黑8549860

TA貢獻1818條經驗 獲得超11個贊

如果文件已經存在,我們要創建一個新文件而不是覆蓋它。


for filname in filelistsrc:

    if os.path.exists(dictfiles[filename]):

        i, temp = 1, filename

        file_name, ext = filename.split("/")[-1].split(".")

        while os.path.exists(temp):

            temp = os.path.join(strdest, f"{file_name}_{i}.{ext}")

            dictfiles[filename] = temp

            i += 1

    shutil.move(filename, dictfiles[filename])

檢查目的地是否存在。如果是,請創建一個新目標并移動文件。


查看完整回答
反對 回復 2023-05-09
?
翻閱古今

TA貢獻1780條經驗 獲得超5個贊

在最后一個 for 循環中移動它之前,您可以檢查文件是否已經存在,并取決于移動它的結果。我做了一個遞歸函數來檢查文件名并遞增它直到文件名是新的:


import os


def renamefile(ffpath, idx = 1):

    

    #Rename the file from test.jpeg to test1.jpeg

    path, ext = os.path.splitext(ffpath)

    path, filename = path.split('/')[:-1], path.split('/')[-1]

    new_filename = filename + str(idx)

    path.append(new_filename + ext)

    path = ('/').join(path)


    #Check if the file exists. if not return the filename, if it exists increment the name with 1    

    if os.path.exists(path):

        print("Filename {} already exists".format(path))

        return renamefile(ffpath, idx = idx+1)

    

    return path


for filename in filelistsrc:

    if os.path.exists(filename):

        renamefile(filename)


    shutil.move(filename, dictfiles[filename])


查看完整回答
反對 回復 2023-05-09
?
喵喵時光機

TA貢獻1846條經驗 獲得超7個贊

這是另一個解決方案,


def move_files(str_src, str_dest):

    for f in os.listdir(str_src):

        if os.path.isfile(os.path.join(str_src, f)):

            # if not .html continue..

            if not f.endswith(".html"):

                continue


            # count file in the dest folder with same name..

            count = sum(1 for dst_f in os.listdir(str_dest) if dst_f == f)

            

            # prefix file count if duplicate file exists in dest folder

            if count:

                dst_file = f + "_" + str(count + 1)

            else:

                dst_file = f


            shutil.move(os.path.join(str_src, f),

                        os.path.join(str_dest, dst_file))


查看完整回答
反對 回復 2023-05-09
  • 3 回答
  • 0 關注
  • 215 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號