多行字符串(Doc String)中用逗号替换不等量空白并保留换行的实现方案及Pandas DataFrame转换需求
这问题我太熟了!遇到这种不等量空白分隔的多行文本,确实用普通replace()会头大(总不能数清楚每段空白的数量吧),之前用正则re.sub()变成单行,是因为没精准匹配空白范围,给你两个实用的解决方案:
方案1:转成逗号分隔的字符串(保留换行)
核心是用正则匹配任意数量的空白字符,但排除换行符,这样替换成逗号时就不会破坏换行结构。代码如下:
import re x = ''' Index Value Max Min State 0 10 nan nan nan 1 20 nan nan nan 2 15 nan nan nan 3 25 20 10 1 4 15 25 15 2 5 10 25 15 4 6 15 20 10 3 ''' # 去掉开头的空行,然后把非换行的空白替换成逗号 formatted_str = re.sub(r'[^\S\n]+', ',', x.strip()) print(formatted_str)
这里[^\S\n]的意思是「匹配所有空白字符,但不包含换行」,+表示匹配一个或多个这样的空白,刚好适配你那种不等量空白的场景,输出就是你想要的逗号分隔格式,换行也完全保留。
方案2:直接转换成Pandas DataFrame(更省心)
如果你的最终目的是做数据分析,根本不用先转成逗号分隔字符串,直接用Pandas就能一步搞定。利用read_csv配合StringIO把多行字符串当成文件对象处理,指定分隔符为任意空白即可:
import pandas as pd from io import StringIO x = ''' Index Value Max Min State 0 10 nan nan nan 1 20 nan nan nan 2 15 nan nan nan 3 25 20 10 1 4 15 25 15 2 5 10 25 15 4 6 15 20 10 3 ''' # 去掉开头空行,直接读取成DataFrame df = pd.read_csv(StringIO(x.strip()), sep='\s+') print(df)
运行后直接得到结构化的DataFrame,后续做统计、分析都方便,Pandas会自动处理不等量的空白分隔,完全不用你手动替换。
内容的提问来源于stack exchange,提问作者darren
相关产品推荐
相关产品推荐

