如何将JSON文件里需要的部分提取出来
将附件里面JSON文件中需要的信息提取出来,如每个小列表中的 “2723975”,以及名字“热带低压”。不知道代码该怎么写,想了一些方法都行不通,求大佬帮忙指点一下,万分感谢。{:10_287:} 祢豆子oo 发表于 2021-11-20 13:30
大佬,我还需要点信息,就是一共需要每个列表中的如{2723975,"nameless","热带低压","20210022"}这四个信 ...
import re
def solution():
with open(r'C:\Users\Administrator\Desktop\list_2021.txt',encoding="utf-8") as f:
s = f.read()
r = re.compile(r'\[([^[].*?),"(.*?)","(.*?)",.*?,"(.*?)",')
for i in r.findall(s, re.M|re.I):
print(i)
solution()
'''
('2723975', 'nameless', '热带低压', '20210022')
('2724099', 'MALOU', '玛瑙', '2120')
('2717929', 'NAMTHEUN', '南川', '2119')
('2713966', 'KOMPASU', '圆规', '2118')
('2713815', 'LIONROCK', '狮子山', '2117')
('2707799', 'MINDULLE', '蒲公英', '2116')
('2707635', 'DIANMU', '电母', '2115')
''' 附件 祢豆子oo 发表于 2021-11-19 21:24
附件
先说结论,可以用遍历的方法获取你所需要的数据。这个文本文档中的字符串的主要部分其实是一个字典结构。我们把这个字符串稍微格式化一下就能看到,文本中第2-26行是一个,单键值字典, 唯一的key是"typhoonList",value是一个列表,列表中的每一项是一条数据,每条数据也是一个列表,列表的第1、3项就是你需要的数据,这个python 只要学过,想提取出来就不难typhoon_jsons_list_2021(
{"typhoonList":[,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
]
}
)另外,提供另外一个思路,这种有规律的字符串可以用正则来处理(知识点百度关键字"python 正则")。这里你需要列表的1,3项,比如第一条数据中为:2723975,"nameless","热带低压"。匹配规则很明显是【7位数字,"若干字母和-","若干中文字符"]】,使用这个模式可以匹配到所有的类似2723975,"nameless","热带低压" 的字符串,剩下的就很简单了,split处理一下就好了~,当然这是我的思路,其实用正则的方法很多,比如你匹配每个列表也行,单独匹配【[7位数字,】获取第1个也行,自己观察规律就好了。具体的解法还是放给楼主自己做吧,多做几次以后遇到同类问题很快就能解决,勤用百度。
本帖最后由 阿奇_o 于 2021-11-19 23:52 编辑
import json
with open('list_2021.txt', 'r', encoding='utf-8') as f:
json_str = f.readlines()
json_data = json.loads(json_str)
for i in json_data['typhoonList']:
# print(i)# 查看一下 (注意是一个列表哦)
pass
# 若需要用pandas,对数据进行进一步处理,可以这样:
import pandas as pd
df = pd.DataFrame(json_data['typhoonList'])
print(df)
# 再进一步,可以重命名列名
# …… import re
def solution():
with open(r'C:\Users\Administrator\Desktop\list_2021.txt',encoding="utf-8") as f:
s = f.read()
r = re.compile(r'\[([^[].*?),.*?,"(.*?)",')
for i in r.findall(s, re.M|re.I):
print(i)
solution()
'''
('2723975', '热带低压')
('2724099', '玛瑙')
('2717929', '南川')
('2713966', '圆规')
('2713815', '狮子山')
('2707799', '蒲公英')
('2707635', '电母')
('2689244', '灿都')
('2688277', '康森')
('2686219', '奥麦斯')
('2681119', '妮妲')
('2681195', '银河')
('2679495', '卢碧')
('2670840', '尼伯特')
('2659831', '查帕卡')
('2659279', '烟花')
('2659097', '热带低压')
('2659075', '热带低压')
('2656478', '蔷琵')
('2655955', '小熊\\n')
('2653775', '彩云')
('2644377', '舒力基')
('2641936', '杜鹃')
''' kaohsing 发表于 2021-11-20 09:57
import re
def solution():
with open(r'C:%users\Administrator\Desktop\list_2021.txt',encoding=" ...
哈哈哈。一看老哥就是天天刷题的。
lightninng 发表于 2021-11-20 10:01
哈哈哈。一看老哥就是天天刷题的。
哈哈😄, 阿奇_o 发表于 2021-11-19 23:49
有几个问题还需要请教一下:
(1)json_str = f.readlines()中的代表什么意思呢?
(2)Traceback (most recent call last):
File "D:\adjust.py", line 11, in <module>
import pandas as pd
ModuleNotFoundError: No module named 'pandas'
这种提示怎么解决?
(3)我只需要每个列表中的如{2723975,"nameless","热带低压","20210022"}这四个信息该怎么写代码呢?
读入是个列表,0是取列表的第一个元素。
你没有装pandas。
i kaohsing 发表于 2021-11-20 09:57
import re
def solution():
with open(r'C:%users\Administrator\Desktop\list_2021.txt',encoding=" ...
大佬,我还需要点信息,就是一共需要每个列表中的如{2723975,"nameless","热带低压","20210022"}这四个信息用正则表达式该怎么写代码呢? kaohsing 发表于 2021-11-20 13:09
读入是个列表,0是取列表的第一个元素。
你没有装pandas。
i
pandas怎么装呢,我百度的结果都是说直接Import=-= 祢豆子oo 发表于 2021-11-20 13:35
pandas怎么装呢,我百度的结果都是说直接Import=-=
搜一搜pip,
如果用pycharm那就简单 这个数据是网站返回jsonp,说白了就是一字符串己,不截取就用正则,截取就用字典 kaohsing 发表于 2021-11-19 21:23
真的是万分感谢{:10_287:}{:10_287:}{:10_287:}
python我还有好多没学到的,比如正则就还不会。大佬写的compile里的内容我还有些看不懂,等我这两天研究研究,要是还有看不懂还得来请教一下{:10_264:} lightninng 发表于 2021-11-19 22:51
先说结论,可以用遍历的方法获取你所需要的数据。这个文本文档中的字符串的主要部分其实是一个字典结构。 ...
谢谢大佬提供思路{:10_287:},正则我还没看看到,准备学习学习
页:
[1]