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

这篇博客讲述了在使用Python从12306获取车站编码数据时遇到的问题,数据以字典形式存储,导致无法直接写入CSV文件。博主通过列举问题和错误信息,提出了解决方案,即利用enumerate()函数遍历字典并将其放入列表,然后成功将数据写入CSV。文章最后展示了完整代码。
摘要由CSDN通过智能技术生成

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

获取url

在这里插入图片描述

结果:

在这里插入图片描述

寻求规律方便编译

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

用字典方式转换

在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述

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

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

在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述

最后结果

在这里插入图片描述

整体代码展示:

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)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值