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

Python 2.7转3.6代码移植问题:CSV读取代码无法运行

适配Python 3.6的CSV数据加载代码修改方案

看起来你这段Python2.7的CSV加载代码在Python3.6里跑不通,主要是因为两个版本在文件IO、文本处理上的差异,我帮你调整一下,同时修正代码里的小问题:

核心问题分析

  • 文件打开模式:Python2里用'rb'二进制模式没问题,但Python3的csv.reader需要处理文本流,二进制模式会导致读取的内容是字节串而非字符串,引发类型错误。
  • 换行符处理:Python3的csv模块推荐打开文件时指定newline='',避免不同系统下换行符被错误转换。
  • 编码问题:Python3默认使用utf-8编码读取文件,如果你的CSV是其他编码(比如Windows常用的cp1252),需要明确指定,否则会出现解码失败。
  • 切片语法错误:原代码里的iloc[1:...是不完整的写法,Python3里应该写成iloc[1:]。

修改后的完整代码

def load_new_data(self):
    full = list()
    # 根据你的CSV实际编码调整,比如utf-8、cp1252、gbk等
    with open(self.filename, 'r', encoding='utf-8', newline='') as csv_in:
        myreader2 = csv.reader(csv_in, delimiter=';')
        count = 0
        headers = []
        for row in myreader2:
            if count == 0:
                headers = row[1:]
                count += 1
            elif count == 1:
                # 跳过第二行数据
                count += 1
            else:
                current_row = row[1:-1]
                full.append(current_row)
                count += 1
    new_df = pd.DataFrame.from_records(full, columns=headers)
    # 修正切片语法,移除多余的省略号
    new_df = new_df.iloc[1:]
    return new_df

关键修改说明

  • 文本模式+编码指定:用'r'文本模式替代'rb',同时显式指定编码,确保CSV里的特殊字符能正确解码。
  • newline参数:newline=''让csv模块自己处理换行符,避免在Windows系统下出现多余的空行或解析错误。
  • 变量初始化:提前初始化headers列表,让代码逻辑更清晰,避免潜在的未定义变量警告。
  • 修正切片语法:把不完整的iloc[1:...改成iloc[1:],确保正确跳过DataFrame的第一行数据。

如果运行时还是出现编码错误,你可以把encoding='utf-8'换成CSV文件实际的编码(比如用记事本打开CSV,另存为时查看编码)。

内容的提问来源于stack exchange,提问作者Emiliano Fraticelli

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:32:44