为了账号安全,请及时绑定邮箱和手机立即绑定

使用不带引号的字符串将文本文件解析为 python

使用不带引号的字符串将文本文件解析为 python

开满天机 2021-11-02 20:18:38
我正在尝试将长.txt文本表解析为pd.DataFrame. 或 Python 中的任何其他可读形式。我成功地尝试了一种方法来做到这一点,但我对它并不完全满意,我确实想改进它。这是我的一个子集.txt:USAF   WBAN  STATION NAME                  CTRY ST CALL  LAT     LON      ELEV(M) BEGIN    END007018 99999 WXPOD 7018                                  +00.000 +000.000 +7018.0 20110309 20130730007026 99999 WXPOD 7026                    AF            +00.000 +000.000 +7026.0 20120713 20170822007070 99999 WXPOD 7070                    AF            +00.000 +000.000 +7070.0 20140923 20150926008260 99999 WXPOD8270                                   +00.000 +000.000 +0000.0 19960101 20100731008268 99999 WXPOD8278                     AF            +32.950 +065.567 +1156.7 20100519 20120323008307 99999 WXPOD 8318                    AF            +00.000 +000.000 +8318.0 20100421 20100421008411 99999 XM20                                                                 20160217 20160217008414 99999 XM18                                                                 20160216 20160217008415 99999 XM21                                                                 20160217 20160217008418 99999 XM24                                                                 20160217 20160217010000 99999 BOGUS NORWAY                  NO      ENRS                           20010927 20041019010010 99999 JAN MAYEN(NOR-NAVY)           NO      ENJA  +70.933 -008.667 +0009.0 19310101 20190203我尝试了以下方法:测试 1:re用于解析空格:with open('test.txt') as f:   lines = f.readlines()   parsed_lines = [re.split("\s+", line) for line in lines]print(test)['007018', '99999', 'WXPOD', '7018', '+00.000', '+000.000', '+7018.0', '20110309', '20130730', '']这是好的,但远非最佳,站名被拆分为另一个列表元素,这仅显示了我的不良regex能力。    })这产生了一个很pd.DataFrame容易清洁的好东西。这是一个很好的方法,但我肯定不是一个很好的方法,有什么方法可以改进这个功能吗?我希望这段代码完美无缺,我不相信那些硬编码的位置。我知道有些工具喜欢sed或awk非常有用,但现在我只能在这个上运行 python;当然subprocess可以做到这一点,但我想依靠 Python 来做到这一点。
查看完整描述

1 回答

?
绝地无双

TA贡献1946条经验 获得超4个赞

Imo,这绝对看起来像一个固定宽度的格式,即每列都有自己的固定数量的字符。

所以,iiuc 你的问题是什么,你应该尝试pd.read_fwf().
https://pandas.pydata.org/pandas-docs/version/0.20/generated/pandas.read_fwf.html


查看完整回答
反对 回复 2021-11-02
  • 1 回答
  • 0 关注
  • 251 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信