win10打开csv乱码

在这里插入图片描述

解决方法:
1、打开Excel;
2、点击任务栏的<数据>;
3、点击<从文本/CSV>选择csv文件;
4、修改文件原始格式为:65001:Unicode(UTF-8);
5、点击加载,即可;
6、将文件另存为.xlsx格式。

import requests import csv import os from datetime import datetime def init(): if not os.path.exists('./commentsData.csv'): with open('./commentsData.csv','w',encoding='utf8',newline='') as csvfile: wirter = csv.writer(csvfile) wirter.writerow([ 'articleId', 'created_at', 'like_counts', 'region', 'content', 'authorName', 'authorGender', 'authorAddress', 'authorAvatar' ]) def wirterRow(row): with open('./commentsData.csv','a',encoding='utf8',newline='') as csvfile: wirter = csv.writer(csvfile) wirter.writerow(row) def get_data(url,params): headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 QuarkPC/2.3.7.277', 'Cookie':'XSRF-TOKEN=NyKhxzaR49IXGJ5bT0O74yR_; SCF=AoA9qZWKG45YMsif-UHiaQCrwb3E0e7trytNddt1IJjRt-MVsVmIfBt-QDt6Lp32gaj17ugcQkJU-lJRp8uVRqc.; SUB=_2A25K5sneDeRhGeFH41sS8S7JyTyIHXVpmkMWrDV8PUNbmtANLUTXkW9NegnIyhWmGQqvYZTIjz4XoO3vKOZvQk_C; SUBP=0033WrSXqPxfM725Ws9jqgMF55529P9D9WhjS8Q9IJYcDIlwdDdTO5ds5NHD95QN1Kn4e027SKz7Ws4DqcjTi--Ri-zXi-i8S0-t; ALF=02_1745503886; WBPSESS=b4Nof7TUCgiz7ZaZYzH9k3G3uPAoO5h8S0hGLBQwrIz7VRBc0Y9mysF1AWMO7CGhS0EzuKKqVLyf7AVMvdwJ3ABvUueMfTdjNGV-YMUK2A-XgzM_QA67bxAu2Bk3kuJy9X0QAJf9ja-3FhEFoQ80kA==' } response = requests.get(url,headers=headers,params=params) if response.status_code == 200: return response.json()['data'] else: return None def parse_json(response,articleId): # commentList = response['data'] for comment in response: created_at = datetime.strptime(comment['created_at'],"%a %b %d %H:%M:%S %z %Y").strftime("%Y-%m-%d") like_counts = comment['like_counts'] authorName = comment['user']['screen_name'] authorGender = comment['user']['ge
最新发布
04-01
<think>嗯,用户的问题是关于使用Python的requests和csv模块处理JSON数据并保存到CSV文件中的实现问题。他们可能需要代码审查或调试帮助。首先,我得理清楚整个流程,确保每个步骤都正确无误。 首先,用户可能会用requests库发送HTTP请求获取JSON数据。这一步需要注意异常处理,比如网络错误或无效的响应状态码。然后解析JSON数据,这里可能会遇到结构问题,比如数据嵌套过深或者字段不一致。接着,将解析后的数据写入CSV文件,需要考虑编码问题,特别是中文字符,可能需要使用utf-8-sig编码来避免乱码。还有CSV的写入方式,比如是用writerow还是writerows,以及如何处理嵌套的JSON结构。 另外,用户提到的引用内容里提到JSON不能存储所有Python对象,所以需要确保要保存的数据都是基本类型。还可能存在字段缺失的情况,需要处理键错误或者默认值。性能方面,如果数据量很大,可能需要分块处理或优化内存使用。 然后,我得检查常见的错误点,比如是否正确设置了HTTP头,比如User-Agent,有些API可能需要。还有CSV写入时的文件打开模式是否正确,是否在写入后正确关闭了文件。使用csv.DictWriter时,字段名是否正确,是否有额外的字段导致错误。 用户可能遇到的问题比如保存的CSV文件乱码,数据不全,或者程序崩溃。需要一步步排查,比如打印中间结果,查看JSON结构,确认字段名是否正确,编码是否正确设置。此外,可能需要处理日期时间格式或其他特殊数据类型的转换。 最后,给出一个示例代码,并指出需要注意的关键点,比如异常处理、编码、字段处理等,这样用户可以根据示例调整自己的代码,解决实际问题。</think>### Python 使用 requests 和 csv 模块处理 JSON 数据并保存到 CSV 的实现要点 #### 一、代码实现框架 ```python import requests import csv import json # 1. 发送请求获取数据 url = "https://api.example.com/data" try: response = requests.get(url, timeout=10) response.raise_for_status() # 自动处理HTTP错误[^3] except requests.exceptions.RequestException as e: print(f"请求失败: {e}") exit() # 2. 解析JSON数据 try: data = response.json() except json.JSONDecodeError: print("无效的JSON格式") exit() # 3. 提取字段并写入CSV required_fields = ['id', 'name', 'value'] # 根据实际API字段修改 with open('output.csv', 'w', newline='', encoding='utf-8-sig') as f: # 中文编码处理[^2] writer = csv.DictWriter(f, fieldnames=required_fields) writer.writeheader() for item in data.get('results', []): # 处理嵌套字段(示例) row = { 'id': item.get('id'), 'name': item.get('name', {}).get('zh-CN', ''), 'value': item.get('value', 0) } writer.writerow(row) ``` #### 二、关键问题排查点 1. **HTTP请求问题** - 添加请求头(如`headers={'User-Agent': 'Mozilla/5.0'}`)应对反爬机制 - 检查API返回状态码:`print(response.status_code)` - 处理分页数据(需循环请求) 2. **JSON解析问题** - 打印原始响应内容:`print(response.text[:200])` 验证数据结构 - 处理嵌套结构时使用安全访问:`item.get('nested', {}).get('field')` - 验证数据量:`print(len(data['results']))` 3. **CSV写入问题** - 使用`utf-8-sig`编码解决Excel中文乱码[^2] - 处理特殊字符:`quoting=csv.QUOTE_NONNUMERIC` - 缺失字段处理:`row.get('field', 'N/A')` #### 三、优化建议 1. 添加类型转换处理: ```python # 在writerow前插入数据清洗 row['value'] = float(row['value']) if row['value'] else 0.0 ``` 2. 使用上下文管理器管理文件: ```python with open(...) as f: # 文件操作代码块 ``` 3. 大数据量分块写入: ```python # 每1000行提交一次写入 from itertools import islice batch_size = 1000 iterator = iter(data['results']) while batch := list(islice(iterator, batch_size)): writer.writerows(process_batch(batch)) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值