Python实现混乱格式TXT转CSV:文本数据清洗方法问询
解决TXT转CSV的多分隔符数据清洗问题
针对这种包含多种分隔符的文本行,用正则表达式提取字段是最高效的方案,比多次split更稳定。以下是Python实现步骤:
核心思路
用正则匹配每行的四个关键字段:邮箱、验证码、状态、日期,忽略中间的分隔符和多余空格,再将字段按CSV格式拼接。
完整代码实现
import re # 读取原始TXT文件 with open('input.txt', 'r', encoding='utf-8') as infile: lines = infile.readlines() # 准备正则匹配规则,精准匹配每行的四个字段 pattern = re.compile(r'([\w@.]+):([\w]+)\s*\|\s*(Status)\s*-\s*(\d{4}-\d{2}-\d{2})') # 处理每行并生成CSV内容 csv_lines = [] for line in lines: line = line.strip() if not line: # 跳过空行 continue match = pattern.match(line) if match: # 提取字段并清理多余空格,按CSV格式拼接 email, code, status, date = [item.strip() for item in match.groups()] csv_line = f"{email}, {code}, {status}, {date}" csv_lines.append(csv_line) # 写入CSV文件 with open('output.csv', 'w', encoding='utf-8', newline='') as outfile: # 可选:写入CSV表头 outfile.write("Email, Code, Status, Date\n") outfile.write('\n'.join(csv_lines))
代码说明
- 正则表达式
([\w@.]+):([\w]+)\s*\|\s*(Status)\s*-\s*(\d{4}-\d{2}-\d{2}):([\w@.]+):匹配邮箱格式(包含字母、数字、@、.):([\w]+):匹配冒号后的验证码(字母数字组合)\s*\|\s*:匹配|前后的任意数量空格(Status)\s*-\s*:匹配Status和横杠前后的任意空格(\d{4}-\d{2}-\d{2}):匹配YYYY-MM-DD格式的日期
- 自动跳过空行,避免CSV出现无效行
- 用
strip()统一清理字段前后的空格,保证输出格式一致
如果你的TXT里有其他格式变体,只需微调正则表达式的匹配规则即可适配。
内容的提问来源于stack exchange,提问作者foliwe83
相关产品推荐
相关产品推荐

