如何使用Python删除多个文件名中的同一部分?

w46czmvw  于 2023-05-08  发布在  Python
关注(0)|答案(1)|浏览(231)

我试图使用Python删除多个文件名中的同一部分,但循环没有迭代。它只是输入路径,但不会从文件名中删除相同的部分。

import os

for root_dir,cur_dir,file_name in os.walk("D:\Python\Scripts"):
    if "new_" in file_name:
    old_name=file_name
    new_name=file_name.replace("new_","")
    os.rename(old_name,new_name)

在文件夹里面有一些子文件夹,文件名需要替换,所以我在os.walk函数中使用了root_dir,cur_dir。

Input file Names in directory:
New_File1.xlsx
New_Data1.xlsx
New_Task1.xlsx

Output file names should be:
File1.xlsx
Data1.xlsx
Task1.xlsx
iqxoj9l9

iqxoj9l91#

首先,我会尝试获得正确的格式

import os

for root_dir,cur_dir,file_name in os.walk("D:\Python\Scripts"):
    if "new_" in file_name:
        old_name=file_name
        new_name=file_name.replace("new_","")
        os.rename(old_name,new_name)

此外,您的代码正在查找new_。由于字符串比较区分大小写,因此new_New_的比较将返回false。

import re

old_value = "New_File"
insensitive_new = re.compile(re.escape('new_'), re.IGNORECASE)
new_value = insensitive_new.sub("", old_value)
print(new_value)

所以你的代码应该看起来沿着这样:

import os
insensitive_new = re.compile(re.escape('new_'), re.IGNORECASE)

for root_dir,cur_dir,file_name in os.walk("D:\Python\Scripts"):
    if "new_" in file_name.lower(): # Converted file_name to lower case for comparison
        new_name=insensitive_new.sub("", file_name) # Replacing new_ with nothing, ignoring case
        os.rename(file_name, new_name)

更新

我现在才注意到我们是如何迭代的:)

import os
import re

insensitive_new = re.compile(re.escape('new_'), re.IGNORECASE)

for root_dir, cur_dir, file_names in os.walk("D:\Python\Scripts"):
    # Iterate through filenames
    for file_name in file_names:
        # Converted file_name to lower case for comparison
        if "new_" in file_name.lower():
            # Replacing new_ with nothing, ignoring case
            new_name = insensitive_new.sub("", file_name) 

            # Renaming file at the path
            os.rename(os.path.join(root_dir, file_name), os.path.join(root_dir, new_name))

相关问题