You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 17:33:24