python当数据都在一个字典里,怎么用csv来录入的方法

需求:从12306中获取车站编码

获取url

python当数据都在一个字典里,怎么用csv来录入的方法_第1张图片

结果:

python当数据都在一个字典里,怎么用csv来录入的方法_第2张图片

寻求规律方便编译

python当数据都在一个字典里,怎么用csv来录入的方法_第3张图片

这里找不到正则的规律,所以上百度找到了相应的正则

在这里插入图片描述

结果是一个列表里面嵌套的元组

python当数据都在一个字典里,怎么用csv来录入的方法_第4张图片

用字典方式转换

在这里插入图片描述
python当数据都在一个字典里,怎么用csv来录入的方法_第5张图片

发现了问题:在此时,不是分成了若干个字典,而是数据都在一个字典中,这样子写入文件会报错

python当数据都在一个字典里,怎么用csv来录入的方法_第6张图片
python当数据都在一个字典里,怎么用csv来录入的方法_第7张图片

还有另一个报错信息:指的是表头只有两个,而数据有很多个,不能解析

问题:数据都被包裹在一个大字典了,而不是分成不同的字典,导致无法解读,而如果只是简单的写入文件,也不行

python当数据都在一个字典里,怎么用csv来录入的方法_第8张图片

解决方法:用enumerate()函数——指定索引值,通过遍历来获取来进行字典分割

python当数据都在一个字典里,怎么用csv来录入的方法_第9张图片
python当数据都在一个字典里,怎么用csv来录入的方法_第10张图片

但如果直接用这个来写入csv,也会报错——原因在于没有拿列表包裹

在这里插入图片描述

解决方法:将字典放入空列表再进行csv文件写入

python当数据都在一个字典里,怎么用csv来录入的方法_第11张图片
python当数据都在一个字典里,怎么用csv来录入的方法_第12张图片

最后结果

python当数据都在一个字典里,怎么用csv来录入的方法_第13张图片

整体代码展示:

import requests
import re
import csv

url ='https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.9028'
headers = {
     
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36'
    }
req =requests.get(url=url,headers=headers)
req.encoding ='utf-8'
# print(req.text)
reqt =req.text
# ## 规律:
# # @bjb|北京北|VAP|beijingbei|bjb|
# # 0@bjd|北京东|BOP|beijingdong|bjd|
# # 1@bji|北京|BJP|beijing|bj|
# # 2@bjn|北京南|VNP|beijingnan|bjn|
station =re.findall(r'([\u4e00-\u9fa5]+)\|([A-Z]+)',reqt)
# print(station)
a = dict(station)
lst =[]
for stations,index in enumerate(a):
    dict ={
     }
    # dict['name'] =
    # print(index,a[index])
    dict['name'] =index
    dict['编码'] =a[index]
    # print(dict)
    lst.append(dict)
    # print(lst)
headers =('name','编码')
with open('12306车站编码.csv','w',encoding='utf-8',newline='')as f:
    writer =csv.DictWriter(f,fieldnames=headers)
    writer.writeheader()
    writer.writerows(lst)

你可能感兴趣的:(python报错信息搜集,python,列表,csv)