Python提取邮件时间戳中小时的代码运行结果不符合预期问题
问题原因
- 核心错误是对字符串迭代的逻辑理解错误:你定义的
txt是单个字符串变量,直接执行for line in txt时,Python会遍历字符串的每个单个字符,而不是按行遍历。循环结束后line最终指向字符串最后一个字符8,和你预期的按行处理完全不符。 - 由于每次循环拿到的都是单个字符,永远不可能满足
line.startswith('From ')的判断条件,所以hr列表不会有任何元素添加,最终输出为空。
修正方案
根据你的使用场景可选择两种修正方式:
场景1:仅处理当前单条文本
直接删除多余的循环即可,代码如下:
txt='From stephen.marquard@uct.ac.za Sat Jan 5 09:14:16 2008' hr=list() if txt.startswith('From '): line = txt.split() hr.append(line[5].split(':')[0]) print(line) print(hr)
运行后即可输出你预期的结果:
['From', 'stephen.marquard@uct.ac.za', 'Sat', 'Jan', '5', '09:14:16', '2008'] ['09']
场景2:后续需要处理多行邮件文本
先调用splitlines()方法把文本拆分为行列表再遍历,代码如下:
# 示例多行邮件文本 txt='''From stephen.marquard@uct.ac.za Sat Jan 5 09:14:16 2008 From louis@media.berkeley.edu Fri Jan 4 18:10:48 2008 ''' hr=list() for line in txt.splitlines(): if line.startswith('From '): split_line = line.split() hr.append(split_line[5].split(':')[0]) print(split_line) print(hr)
内容的提问来源于stack exchange,提问作者Amit Govind Sharma
相关产品推荐
相关产品推荐

