iT邦幫忙

0

python中如何將指定目錄下所有檔案依照這個正則表達式重新命名?

  • 分享至 

  • xImage
import os
import re

# 指定文件夹路径
folder_path = r'H:\BT\FC2'

# 编译正则表达式模式
pattern = re.compile(r'FC2-\d+.*?_')

# 遍历文件夹中的文件
for file_name in os.listdir(folder_path):
    # 构建完整的文件路径
    file_path = os.path.join(folder_path, file_name)

    # 检查文件是否是普通文件(非文件夹)
    if os.path.isfile(file_path):
        # 使用正则表达式替换文件名
        new_file_name = re.sub(pattern, 'new_pattern', file_name)

        # 构建新的文件路径
        new_file_path = os.path.join(folder_path, new_file_name)

        # 检查新文件路径是否已存在
        if os.path.exists(new_file_path):
            print(f"文件 '{new_file_name}' 已存在,无法重命名")
        else:
            # 重命名文件
            os.rename(file_path, new_file_path)

程式碼是由chatgpt幫忙寫的.
不過這個會顯示錯誤"當檔案已存在時,無法建立該檔案"
我們要修改的檔案當然是已經存在的檔案
如果不存在的檔案又如何可以被修改呢?
這樣的邏輯不是很奇怪?

froce iT邦大師 1 級 ‧ 2023-05-26 09:07:26 檢舉
1. 如果你只是要改檔案名,有很多工具可用。
2. 「我們要修改的檔案當然是已經存在的檔案」
chatGPT沒忽略掉這點

if os.path.exists(new_file_path):

這句是檢查你要改成的檔案是不是已經有了,不是檢查舊的檔案名稱是不是已經有了。

a.txt要改成b.txt當然要先檢查b.txt是不是已經存在,要不然會出錯。
fdfanmo iT邦新手 5 級 ‧ 2023-05-26 11:52:28 檢舉
原來是這樣的意思.謝謝froce大.我懂了.
不然我一直搞不懂他的邏輯
下面的幾位大大的幫忙回覆內容
由於我現在不在該電腦上沒辦法做測試.
等今天下班後我回去研究一下.
不懂的地方再來請教各位大大.
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
GGU.IN
iT邦新手 4 級 ‧ 2023-05-26 08:26:08
 # 检查新文件路径是否已存在
        if os.path.exists(new_file_path):
            print(f"文件 '{new_file_name}' 已存在,无法重命名")
        else:

這段刪除試試

fdfanmo iT邦新手 5 級 ‧ 2023-05-27 20:15:39 檢舉

感謝GGU.IN大大幫忙回覆

1
alien663
iT邦研究生 4 級 ‧ 2023-05-26 08:40:35

這行: new_file_name = re.sub(pattern, 'new_pattern', file_name)要改成你要的格式阿

假設你的檔案名稱FC2-100acf.dsf_.pdf,因為這檔案名稱符合條件,所以都會被換成new_pattern,當第二個檔案被判斷到時,就會引發檔案名稱重複的問題,只是把判斷檔案名稱重複的部分移除是沒有用的。你要做的是定義清楚你要把檔案名稱改成怎樣的格式,然後把'new_pattern'改成你要的結果。

GGU.IN iT邦新手 4 級 ‧ 2023-05-26 08:50:40 檢舉

那就要count大法了

fdfanmo iT邦新手 5 級 ‧ 2023-05-27 08:06:39 檢舉

謝謝alien663大大的提醒.我確實忘記了這邊需要改成我們需要的替換後結果.感謝alien663大的說明

0
japhenchen
iT邦超人 1 級 ‧ 2023-05-26 08:54:27
if os.path.exists(new_file_path):
            print(f"文件 '{new_file_name}' 已存在,无法重命名")
        else:
            # 重命名文件
            os.rename(file_path, new_file_path)

改成

if os.path.exists(new_file_path):
            # 重命名文件
            os.rename(file_path, new_file_path)

看更多先前的回應...收起先前的回應...
froce iT邦大師 1 級 ‧ 2023-05-26 09:43:21 檢舉

chatGPT給的code沒啥錯啦,您沒看清楚。

a.txt要改成b.txt當然是要先檢查b.txt是不是存在,b.txt"不存在"才把a.txt改名成b.txt,要不然就是略過或是改成b-copy.txt。

改成這樣會變成b.txt存在,你還叫程式把a.txt改成b.txt。

/images/emoticon/emoticon13.gif
我承認看錯,以為是檢查舊檔名已存在

那要加上新檔名也存在時的決策,比如加guid或時間做擴充檔名,或是刪除已存在的新檔名,或是改用先複製再刪除的方式料理

fdfanmo iT邦新手 5 級 ‧ 2023-05-27 20:17:07 檢舉

謝謝幫忙回覆^_^

我要發表回答

立即登入回答