Python如何在指定分隔符间插入换行 修复<|>分隔的错位CSV行
修复换行错位的
<|>分隔CSV文件的实现方法 问题背景
已知CSV文件列数为3,分隔符为<|>,行错位由意外插入的换行符导致,原始数据如下:
PERSON_ID<|>DEPT_ID<|>DATE_JOINED AAAAA<|>S1<|>2021/01 /03 BBBBBB<|>S2<|>2021/02/03 CCCCC<|>S1<|>2021/03/05
已完成空格移除操作,代码如下:
import re your_string ="""PERSON_ID<|>DEPT_ID<|>DATE_JOINED AAAAA<|>S1<|>2021/01 /03 BBBBBB<|>S2<|>2021/02/03 CCCCC<|>S1<|>2021/03/05""" print(re.sub(r'\s{1,}','',your_string.strip()))
执行后得到无空格连续字符串:
PERSON_ID<|>DEPT_ID<|>DATE_JOINEDAAAAA<|>S1<|>2021/01/03BBBBBB<|>S2<|>2021/02/03CCCCC<|>S1<|>2021/03/05
需要在10位长度的日期末尾插入换行,最终得到规整CSV:
PERSON_ID<|>DEPT_ID<|>DATE_JOINED AAAAA<|>S1<|>2021/01/03 BBBBBB<|>S2<|>2021/02/03 CCCCC<|>S1<|>2021/03/05
实现方案
方法1:按「分隔符+10位日期」规则插入换行
利用日期固定为10位YYYY/MM/DD格式的特性,正则匹配<|>加10位日期的组合,在匹配内容末尾插入换行即可,注意正则中|是特殊字符需要转义,完整代码:
import re raw_str = """PERSON_ID<|>DEPT_ID<|>DATE_JOINED AAAAA<|>S1<|>2021/01 /03 BBBBBB<|>S2<|>2021/02/03 CCCCC<|>S1<|>2021/03/05""" # 移除所有空白字符 clean_str = re.sub(r'\s+', '', raw_str.strip()) # 匹配<|>加10位日期,在末尾加换行 result = re.sub(r'(<\|>\d{4}/\d{2}/\d{2})', r'\1\n', clean_str) # 移除末尾多余换行 result = result.rstrip('\n') print(result)
方法2:按列数规则拆分(适用性更强)
如果后续第三列格式可能调整,不依赖日期格式,直接按3列的规则拆分拼接即可:
import re raw_str = """PERSON_ID<|>DEPT_ID<|>DATE_JOINED AAAAA<|>S1<|>2021/01 /03 BBBBBB<|>S2<|>2021/02/03 CCCCC<|>S1<|>2021/03/05""" clean_str = re.sub(r'\s+', '', raw_str.strip()) # 按分隔符拆分所有字段 fields = clean_str.split('<|>') lines = [] # 每3个字段拼接为一行 for i in range(0, len(fields), 3): line = '<|>'.join(fields[i:i+3]) lines.append(line) result = '\n'.join(lines) print(result)
两种方法运行后均可得到符合要求的规整CSV数据。
内容的提问来源于stack exchange,提问作者Barney-LoveStudy
相关产品推荐
相关产品推荐

