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

我正在尝试将长.txt文本表解析为pd.DataFrame. 或 Python 中的任何其他可读形式。我成功地尝试了一种方法来做到这一点,但我对它并不完全满意,我确实想改进它。


这是我的一个子集.txt:


USAF   WBAN  STATION NAME                  CTRY ST CALL  LAT     LON      ELEV(M) BEGIN    END


007018 99999 WXPOD 7018                                  +00.000 +000.000 +7018.0 20110309 20130730

007026 99999 WXPOD 7026                    AF            +00.000 +000.000 +7026.0 20120713 20170822

007070 99999 WXPOD 7070                    AF            +00.000 +000.000 +7070.0 20140923 20150926

008260 99999 WXPOD8270                                   +00.000 +000.000 +0000.0 19960101 20100731

008268 99999 WXPOD8278                     AF            +32.950 +065.567 +1156.7 20100519 20120323

008307 99999 WXPOD 8318                    AF            +00.000 +000.000 +8318.0 20100421 20100421

008411 99999 XM20                                                                 20160217 20160217

008414 99999 XM18                                                                 20160216 20160217

008415 99999 XM21                                                                 20160217 20160217

008418 99999 XM24                                                                 20160217 20160217

010000 99999 BOGUS NORWAY                  NO      ENRS                           20010927 20041019

010010 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 来做到这一点。


开满天机
浏览 252回答 1
1回答

绝地无双

Imo,这绝对看起来像一个固定宽度的格式,即每列都有自己的固定数量的字符。所以,iiuc 你的问题是什么,你应该尝试pd.read_fwf().https://pandas.pydata.org/pandas-docs/version/0.20/generated/pandas.read_fwf.html
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python