带有文本、数字和日期的文件名中的驼峰大小写和下划线添加
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
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