Python脚本中日期转字符串切片不符合预期的问题咨询
问题分析与解决
首先明确Python字符串切片的规则:s[:n]是取字符串的前n个字符,而非截取到第n个位置的字符。我们拿你的日期字符串举例拆解:
当日期是每月1-9日时,strftime("%Y_%m_%d")生成的字符串是2023_04_01(总长度10):
[:8]→ 取前8个字符,结果是2023_04_(字符依次为:2、0、2、3、、0、4、)[:9]→ 取前9个字符,结果是2023_04_0
当日期是10日及以后时,生成的字符串是2023_04_10:
[:8]→ 同样取前8个字符,结果还是2023_04_[:9]→ 取前9个字符,结果是2023_04_1
你之前的核心误解在于对切片长度的计算错误:
- 你以为
[:9]会得到2023_04_0,这在1-9日确实成立,此时glob匹配*2023_04_0*能覆盖当月1-9日的文件,所以有效;但10日之后,[:9]得到2023_04_1,glob只能匹配包含这个子串的文件(比如10-19日的),会漏掉1-9日的文件,因此失效。 - 你提到
[:8]在1-9日得到2023_04_1,这应该是测试时的误解或笔误——实际[:8]的结果始终是2023_04_,如果出现异常,可能是代码其他环节出错了。
正确解决方案
根本不需要用切片截取月份前缀,直接用strftime生成精准的当月前缀即可:
from glob import glob from datetime import date # 直接生成当月前缀:YYYY_MM_ month_prefix = date.today().strftime("%Y_%m_") files = glob(f"{path}*{month_prefix}*") if len(files) == 0: print(f"Failed to locate this month's {automation} file(s) at {path}...") else: print(f"Found and processed this month's {len(files)} {automation} file(s). Logged at {files}")
这样不管当月是几号,都能精准匹配所有以YYYY_MM_开头的日志文件,完全规避切片带来的问题。
内容的提问来源于stack exchange,提问作者bkiaacu
相关产品推荐
相关产品推荐

