首页 > 解决方案 > 带有文本、数字和日期的文件名中添加骆驼大小写和下划线

问题描述

python 和 pandas 相对较新,因此这里需要一些输入。在这里欣赏一些回应。我有多个文件,其文件名包含文本、数字和日期。我想要带有下划线的驼峰式外壳并将空白修剪为标准格式,例如,

文件名- ARA Inoc Start Times V34 20200418 .xlsx 被命名为Ara_Inoc_Start_Time_V34_20200418.xlsx

FileName -Batch Start Time V3 20200418.xlsx命名为Batch_Start_Time_V3_20200418.xlsx

我面临的挑战是 1)如何在日期之前添加下划线?2) 在文件名中包含一个单词,如 ARA Inoc Start - 我的代码将其转换为 A_R_A _Inoc _Start。如何使其适应 Ara_Inoc?这也将涉及修剪空白。如何在当前代码中添加它。

def change_case(str): 
    res = [str[0].upper()] 
    for c in str[1:]: 
        if c in ('ABCDEFGHIJKLMNOPQRSTUVWXYZ'): 
            res.append('_') 
            res.append(c.upper()) 
        else: 
            res.append(c) 

    return ''.join(res) 

# Driver code 

for filename in os.listdir("C:\\Users\\t\\Documents\\DummyData\\"):
    str = filename
    print(change_case(str)) 

标签: pythonpython-3.xpandascamelcasing

解决方案


使用 拆分字符串str.split(),使用 转换第一个字母str.upper(),然后使用 连接它们str.join()

import os
for filename in [
    ' ARA Inoc Start Times V34 20200418.xlsx  ', 
    ' Batch_Start_Time_V3_20200418.xlsx '
]:  #  os.listdir('C:\\Users\\t\\Documents\\DummyData\\')
    new_filename = '_'.join([i[:1].upper()+i[1:].lower() for i in filename.strip().split()])
    print(new_filename) 

输出:

Ara_Inoc_Start_Times_V34_20200418.xlsx
Batch_start_time_v3_20200418.xlsx

注意使用i[:1].upper()+i[1:]代替str.title()。您可以使用后者,但这也会将文件扩展名转换为标题大小写,因此我使用上面的代替。或者,您可以在进行转换之前拆分文件名和扩展名:

import os
for filename in[
    ' ARA Inoc Start Times V34 20200418.xlsx  ', 
    ' Batch_Start_Time_V3_20200418.xlsx '
]:
    filename, ext = filename.rsplit('.', 1)
    filename = '_'.join([i.title() for i in filename.strip().lower().split()])
    new_filename = '.'.join([filename, ext])
    print(new_filename) 

输出:

Ara_Inoc_Start_Times_V34_20200418.xlsx  
Batch_Start_Time_V3_20200418.xlsx 

推荐阅读