如何在Python中删除多个文件(匹配特定文件名模式)的文件名中的子字符串部分? [重复]

问题描述 投票:0回答:1

我正在尝试删除文件名的某些部分,以便我可以使用模式来每天提取数据。

我在这个文件夹中有以下文件(F:\Source)。

WH_BEE_FULL_20241017_170853_1.bak
WH_BEE_FULL_20241017_170853_2.bak
WH_BEE_FULL_20241017_170853_3.bak
WH_BEE_FULL_20241017_170853_4.bak
WH_BEE_FULL_20241017_170853_5.bak
WH_BEE_FULL_20241017_170853_6.bak

我需要删除文件名中的“170853”部分,这样最终结果将是:

WH_BEE_FULL_20241017_1.bak
WH_BEE_FULL_20241017_2.bak
WH_BEE_FULL_20241017_3.bak
WH_BEE_FULL_20241017_4.bak
WH_BEE_FULL_20241017_5.bak
WH_BEE_FULL_20241017_6.bak

因此,“20241017”每天都会更改,因为它是“YYYYMMDD”格式,但其他字段(如“WH”、“BEE”、“FULL”和“_1 ~ _6”)将是静态的。

重命名后,这些文件将被重新定位到(F:\Destination)文件夹。

我该如何用 Python 来做这件事?

python
1个回答
1
投票

好吧,既然您没有提供代码示例,我所能做的就是编写一个示例脚本来完成所需的操作。同时使用

os
shutil
模块。

import os
import shutil

source_dir = os.path.join('F:', 'Source')
destination_dir = os.path.join('F:', 'Destination')

os.makedirs(destination_dir, exist_ok=True)

for filename in os.listdir(source_dir):
    if filename.endswith('.bak'):
        parts = filename.split('_')
        if len(parts) >= 6:  # Ensure there are enough parts
            new_filename = f"{parts[0]}_{parts[1]}_{parts[2]}_{parts[3]}_{parts[5]}"
            
            old_file_path = os.path.join(source_dir, filename)
            new_file_path = os.path.join(destination_dir, new_filename)
            
            if not os.path.exists(new_file_path):
                shutil.move(old_file_path, new_file_path)

您可以将该代码保存在 python 文件中,然后使用

python filename.py
运行它。

© www.soinside.com 2019 - 2024. All rights reserved.