Python获取NIFTY 50数据无法生成规范CSV格式求助
问题修复方案
核心问题分析
- 函数名不匹配:定义的
Download_data()和调用的Download_Fresh_data2()不一致,会触发NameError。 - CSV解析错误:手动用
split(',')拆分行,会破坏包含逗号的字段(比如带引号的文本),导致表头和数据错位。 - 不必要的字符串替换:
replace('\",\"', '')会破坏CSV的字段分隔逻辑,导致格式混乱。
修复后的代码
import requests import csv from io import StringIO def Download_data(): s = requests.Session() headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36'} s.headers.update(headers) # 访问首页获取会话所需的Cookie(NSE接口要求) resp = s.get('https://www.nseindia.com/market-data/live-equity-market') resp.raise_for_status() # 请求NIFTY 50的CSV数据 resp = s.get('https://www.nseindia.com/api/equity-stockIndices?csv=true&index=NIFTY%2050') resp.raise_for_status() # 用csv模块原生解析响应文本,避免手动拆分的错误 csv_stream = StringIO(resp.text) csv_reader = csv.reader(csv_stream) # 写入规范的CSV文件 with open('___N50__.csv', 'w', newline='', encoding='utf-8') as csvfile: csv_writer = csv.writer(csvfile) csv_writer.writerows(csv_reader) if __name__ == "__main__": Download_data() # 修正函数调用名,与定义保持一致
关键修复说明
- 函数名统一:将调用的函数名改为
Download_data(),匹配定义的函数,解决运行时的名称错误。 - 原生CSV解析:使用
StringIO将响应文本转为文件流,结合csv.reader处理带引号的字段,保证表头和数据列严格对齐。 - 移除错误替换:删除破坏CSV格式的
replace('\",\"', '')操作,保留原始数据的字段分隔逻辑。 - 指定编码:写入文件时添加
encoding='utf-8',避免特殊字符或非英文字符出现乱码。
内容的提问来源于stack exchange,提问作者Lokkii9
相关产品推荐
相关产品推荐

