使用python重命名文件夹中的文件名列表

Posted

技术标签:

【中文标题】使用python重命名文件夹中的文件名列表【英文标题】:Rename a list of filename in a folder using python 【发布时间】:2017-10-09 11:08:18 【问题描述】:

我的数据文件夹中有一个 WAV 文件列表,数据以小时、分钟和秒的格式显示。

例如,

C:\Users\Desktop\Data

01h02m02s.wav
01h02m13s.wav
01h02m24s.wav

我需要修改文件名,以编程方式将其转换为秒。我该怎么做?

3722s.wav
3733s.wav
3744s.wav

感谢所有反馈和帮助。

谢谢

【问题讨论】:

见 ***.com/questions/7833807/… 和 os.rename(old,new) 从字符串中获取小时、分钟和秒的部分。将小时乘以 3600,将分钟乘以 60,然后将秒数相加。因此,如果data = '01h02m02s.wav' 您将拥有sum([int(data[:2]) * 3600, int(data[3:5]) * 60], int(data[6:8])),那么您将获得3722 【参考方案1】:

使用glob.glob() 获取文件列表,然后使用正则表达式尝试从文件名中提取hoursminutessecondsos.rename() 用于实际重命名文件:

import glob
import re
import os

path = r'C:\Users\Desktop\Data'

for wav in glob.glob(os.path.join(path, '*.wav')):
    re_hms = re.findall(r'(\d+)h(\d+)m(\d+)s\.wav', wav)

    if re_hms:
        hours, minutes, seconds = map(int, re_hms[0])
        total_seconds = hours * 3600 + minutes * 60 + seconds
        new_wav = os.path.join(path, 's.wav'.format(total_seconds))
        print " -> ".format(wav, new_wav)
        os.rename(wav, new_wav)

os.path.join() 用于安全地将文件路径连接在一起,而不必担心添加路径分隔符。

【讨论】:

【参考方案2】:

如果路径中的所有文件都是 WAV 并且它们的名称具有您所显示的模式,您可以使用它。

import os

path = r'C:\Users\Desktop\Data'
waves = os.listdir(path)

for wave in waves:
    hours, minutes, seconds = map(int, [wave[:2], wave[3:5], wave[6:8]])
    total_seconds = hours * 3600 + minutes * 60 + seconds
    new_name = os.path.join(path, "s.wav".format(total_seconds))

    os.rename(os.path.join(path, wave), new_name)

【讨论】:

以上是关于使用python重命名文件夹中的文件名列表的主要内容,如果未能解决你的问题,请参考以下文章

python重命名多个文件

在Python中基于csv重命名文件中的图像

python怎样批量修改文件名

如何利用python重命名一个文件名

在Python中重命名目录中的多个文件[重复]

python重命名子目录中的所有文件