带有文本、数字和日期的文件名中的驼峰大小写和下划线添加

Camel Casing and Underscore addition in filename with text, number and date

python 和 pandas 相对较新,因此这里需要一些输入。感谢这里的一些回应。 我有多个文件,文件名包含文本、数字和日期的组合。我想要 带有下划线和白色修剪 space 的驼色外壳为标准格式,例如,

FileName- 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?这也涉及修剪白色 space。如何在当前代码中添加它。

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)) 

使用 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