python - 带有文本、数字和日期的文件名中添加骆驼大小写和下划线
问题描述
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))
解决方案
使用 拆分字符串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
推荐阅读
- inno-setup - 如果安装在 Inno Setup 中更新,则在 ssPostInstall 步骤中排除部分代码部分
- java - 由itextpdf生成的下载pdf中的编码
- sql - 本机查询在 MS SQL Server Management Studio 上工作,但不在代码上
- if-statement - 比较可能有也可能没有界限的 2 个范围
- java - 将值放入 java8 映射时,是否有类似 getOrDefault 的东西?
- node.js - CodeceptJS:分配标签的语义检查
- key-bindings - 在 tmux 中构建自动化配置
- python - 从选择列表中获取对象的 ID。Django,表格
- android - 使用 XmlPullParser 为特定标签解析 XML?
- azure-application-insights - Kusto 查询渲染函数忽略指定的 Y 范围