如何解析CSV文件路径字符串生成portName等指定变量?
实现思路与代码示例
这事儿其实挺 straightforward 的,咱们一步步来拆解解决:
核心思路
你的文件名是严格按照portName_YYYYMMDD_frequency.csv的格式命名的,所以核心就是先提取纯文件名(去掉路径和后缀),再按下划线分割,最后处理日期格式。
具体实现步骤
1. 提取纯文件名
首先得从完整路径里把文件名(不带路径和.csv后缀)抠出来,用Python的pathlib模块最方便(比传统的os.path更简洁):
from pathlib import Path # 注意路径里的反斜杠要转义,或者用原始字符串r"" file_path = r"E:...\Portfolios\ConsDisc_20160701_Q.csv" # 获取不带后缀的文件名 file_stem = Path(file_path).stem # 结果是 "ConsDisc_20160701_Q"
2. 按下划线分割字符串
用split('_')把分割后的字符串拆成列表,直接对应咱们需要的三个字段:
parts = file_stem.split('_') # parts 现在是 ['ConsDisc', '20160701', 'Q']
3. 处理日期格式
把YYYYMMDD格式的字符串转换成YYYY-MM-DD,有两种简单方法:
方法一:字符串切片(不用额外导入模块)
date_raw = parts[1] inceptionDate = f"{date_raw[:4]}-{date_raw[4:6]}-{date_raw[6:]}" # 结果是 "2016-07-01"
方法二:用datetime模块(更规范,适合复杂日期校验)
from datetime import datetime date_raw = parts[1] inceptionDate = datetime.strptime(date_raw, "%Y%m%d").strftime("%Y-%m-%d")
4. 赋值给目标变量
最后把分割后的部分直接赋值就行:
portName = parts[0] frequency = parts[2]
完整代码整合
把上面的步骤串起来,就是完整的实现:
from pathlib import Path file_path = r"E:...\Portfolios\ConsDisc_20160701_Q.csv" file_stem = Path(file_path).stem parts = file_stem.split('_') portName = parts[0] # 用字符串切片处理日期 date_raw = parts[1] inceptionDate = f"{date_raw[:4]}-{date_raw[4:6]}-{date_raw[6:]}" frequency = parts[2] # 验证结果 print(f"portName = '{portName}'") print(f"inceptionDate = '{inceptionDate}'") print(f"frequency = '{frequency}'")
运行后会输出:
portName = 'ConsDisc' inceptionDate = '2016-07-01' frequency = 'Q'
额外小提示
如果你的文件路径里可能存在多个下划线(不过看你的示例是固定三个部分),可以考虑用split('_', maxsplit=2)来避免意外分割;另外如果要批量处理多个文件,把这段逻辑封装成函数会更方便。
内容的提问来源于stack exchange,提问作者lee.edward01
相关产品推荐
相关产品推荐

