gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 21:59:25 25 4
gpt4 key购买 nike

我正在尝试将长 .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',
'']

可以,但远非最佳,电台名称被拆分为另一个列表元素,这仅显示了我糟糕的正则表达式能力。

测试 2: 使用字符串位置:

with open('/Users/ivan/weather_isd_noaa/data/isd-history.txt') as f:
lines = f.readlines()

colum_names = lines[0]
usaf_code = []
wban = []
station_name = []
country = []
us_state = []
call = []
lat = []
lon = []
elevation = []
begin = []
end = []

for line in lines:
usaf_code.append(line[:6])
wban.append(line[7:12])
station_name.append(line[13:43])
country.append(line[43:45])
us_state.append(line[46:50])
call.append(line[51:55])
call.append(line[57:64])
lat.append(line[57:64])
lon.append(line[56:73])
elevation.append(line[74:81])
begin.append(line[82:90])
end.append(line[91:100])

df = pd.DataFrame({
'usaf_code': usaf_code,
'wban': wban,
'station_name': station_name,
'country': country,
'us_state': us_state,
'lat': lat,
'lon': lon,
'elevation': elevation,
'begin': begin,
'end': end
})

这会产生一个漂亮的pd.DataFrame,而且相当容易清理。这是一个很好的方法,但我确信不是一个很好的方法,有什么方法可以改进这个功能吗?我希望这段代码是完美的,并且我不相信那些硬编码的位置。

我知道一些工具,如 sed 或 awk 非常有用,但目前我只能在上面运行 python;当然 subprocess 可以做到这一点,但我想依靠 Python 来实现这一点。

最佳答案

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

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

关于python - 使用不带引号的字符串将文本文件解析为 python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54600386/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com