Python如何解析类似Excel“完整日期”格式的葡语日期文本
你当前代码运行失败有两个核心错误:
- locale设置方法调用错误:
locale模块没有set方法,正确的设置方法是locale.setlocale - 日期格式符写反:葡萄牙语星期全称的占位符是
%A,你误写为A%
可行实现方案
方案1:修正代码直接匹配原始格式转换
优势是不需要修改原始日期字符串,直接对应格式转换,注意适配不同操作系统的locale名称即可:
import locale from datetime import datetime import pandas as pd # 适配不同系统的葡萄牙语巴西locale名 try: # Linux/macOS环境 locale.setlocale(locale.LC_TIME, 'pt_BR.utf8') except: # Windows环境 locale.setlocale(locale.LC_TIME, 'Portuguese_Brazil.1252') # 标准库datetime转换 dt_obj = datetime.strptime("Quarta-feira, 1 de Janeiro de 2020", "%A, %d de %B de %Y") print(dt_obj) # 输出 2020-01-01 00:00:00 # pandas转换同理,修正参数即可 pd_dt = pd.to_datetime("Quarta-feira, 1 de Janeiro de 2020", format="%A, %d de %B de %Y") print(pd_dt) # 输出 2020-01-01 00:00:00
方案2:移除星期部分后转换(跨环境兼容性更强)
就是你提到的思路,不需要依赖系统locale配置,不会因为环境差异报错,适合批量处理CSV场景:
import pandas as pd # 单条字符串处理 date_str = "Quarta-feira, 1 de Janeiro de 2020" processed_str = date_str.split(",", 1)[1].strip() dt = pd.to_datetime(processed_str, format="%d de %B de %Y") print(dt) # CSV整列批量处理 df = pd.read_csv("你的报表路径.csv") df['日期列'] = pd.to_datetime(df['日期列'].str.split(",",1).str[1].str.strip(), format="%d de %B de %Y")
方案3:使用dateutil库无格式转换
如果不想手动写格式规则,也可以自定义dateutil的解析规则,不需要依赖系统locale:
from dateutil.parser import parse from dateutil.parser import parserinfo class PTBRParserInfo(parserinfo): WEEKDAYS = [ ("Segunda-feira", "Seg"), ("Terça-feira", "Ter"), ("Quarta-feira", "Qua"), ("Quinta-feira", "Qui"), ("Sexta-feira", "Sex"), ("Sábado", "Sáb"), ("Domingo", "Dom") ] MONTHS = [ ("Janeiro", "Jan"), ("Fevereiro", "Fev"), ("Março", "Mar"), ("Abril", "Abr"), ("Maio", "Mai"), ("Junho", "Jun"), ("Julho", "Jul"), ("Agosto", "Ago"), ("Setembro", "Set"), ("Outubro", "Out"), ("Novembro", "Nov"), ("Dezembro", "Dez") ] dt = parse("Quarta-feira, 1 de Janeiro de 2020", parserinfo=PTBRParserInfo()) print(dt)
内容的提问来源于stack exchange,提问作者Daniel Lima
相关产品推荐
相关产品推荐

