Python读取无分隔符文本文件并提取指定列的技术求助
解决Pandas读取空格分隔文本文件并提取指定列的问题
咱们一步步来搞定这个问题,核心问题出在文本分隔符设置不对,还有header参数的用法不符合你的需求,才导致只输出了一列。
问题拆解
你的文本文件是多空格分隔的,但pandas.read_csv默认用逗号当分隔符,所以会把整行内容当成一列。另外,header=4是把第5行当成表头,但你不需要表头,反而要跳过前3行H26开头的无关内容,直接读取后续A开头的数据行。
完整解决方案代码
import pandas as pd # 读取文件:用正则匹配任意数量空格做分隔符,跳过前3行H26内容,不设置表头 df = pd.read_csv("data.txt", sep='\s+', skiprows=3, header=None) # 提取目标列:处理时间列保留前5位,再取坐标列 result = pd.DataFrame({ 'time': df[2].astype(str).str[:5], 'x_coord': df[10], 'y_coord': df[11] }) # 输出你想要的格式 print(result.to_string(index=False, header=False))
代码细节解释
sep='\s+':告诉Pandas用任意数量的空白字符(空格、制表符都算)作为列分隔符,这样就能正确拆分每一列数据。skiprows=3:直接跳过前3行H26开头的无效内容,从第4行(A开头的行)开始读取有效数据。header=None:因为你的数据没有专门的表头行,所以不让Pandas把第一行数据误判为表头。- 列提取与处理:
- 时间列是原始数据的第3列(索引从0开始,对应
df[2]),转成字符串后截取前5位,得到你要的2008.5格式。 - X坐标是原始数据的第11列(
df[10]),Y坐标是第12列(df[11])。
- 时间列是原始数据的第3列(索引从0开始,对应
- 最后用
to_string(index=False, header=False)输出纯数据行,完全符合你想要的格式。
示例输出
运行后会得到你期望的结果:
2008.5 264363.6 4122568.8 2008.5 264363.6 4122568.8 2008.5 264363.6 4122568.8 2008.5 264363.6 4122568.8 2008.5 264363.6 4122568.8 ...
内容的提问来源于stack exchange,提问作者ayaz alp
相关产品推荐
相关产品推荐

