You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 23:02:18