Python读取分隔符异常的文件问题求助
解决不定数量空格分隔的文件处理问题
针对这种用不定数量空格作为列分隔符的文件,有几种实用的处理思路,都是日常自动化流程里常用的:
1. 用命令行工具快速处理
- awk(最省心):awk默认会把任意数量的空白字符(空格、制表符)当成分隔符,直接按列提取或处理就行。比如要提取前3列:
不管每行有多少个空格,它都会自动把列拆分好。awk '{print $1, $2, $3}' input.txt > output.txt - tr 压缩空格:把多个连续空格压缩成单个,之后就能用普通按空格分割的工具处理:
tr -s ' ' < input.txt > output.txt - sed 替换多空格:用正则把1个以上的空格替换成单个空格:
sed 's/ */ /g' input.txt > output.txt
2. 用Python脚本自动化处理
如果要集成到复杂的自动化流程里,Python是很好的选择:
- 直接用
split()方法:不带参数的split()会自动分割任意数量的空白字符,包括空格、换行等:with open("input.txt", "r") as infile, open("output.txt", "w") as outfile: for line in infile: # 先去掉首尾空白,再拆分列 columns = line.strip().split() # 这里可以加你的业务逻辑,比如筛选列、转换格式 outfile.write("\t".join(columns) + "\n") # 比如转成制表符分隔 - 用
csv模块处理:如果需要更规范的表格处理,csv模块支持设置跳过开头的空格:import csv with open("input.txt", "r") as infile: # 指定分隔符为空格,跳过每个字段前的空格 reader = csv.reader(infile, delimiter=" ", skipinitialspace=True) for row in reader: # row就是拆分好的列列表 print(row)
3. 文本编辑器批量预处理
如果只是临时处理文件,用VS Code、Sublime这类编辑器的正则替换功能:
- 打开文件后,按
Ctrl+H调出替换面板,勾选「正则表达式」选项 - 查找框输入
+(表示1个以上的空格),替换框输入(单个空格) - 点击「全部替换」,就能把所有多空格统一成单个空格,之后再按正常方式处理
注意:如果你的文件里存在字段本身包含空格的情况(比如"John Doe"作为一个字段),以上方法会失效,这时候需要确认文件是否有其他隐含规则(比如用引号包裹含空格的字段),再针对性调整。
内容的提问来源于stack exchange,提问作者Mário Jorge Rocha
相关产品推荐
相关产品推荐

