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

Python 3.10触发TypeError:无法对类字节对象使用字符串模式求助

解决Python3中csv.Sniffer报错:cannot use a string pattern on a bytes-like object

你的报错根本原因不是filename的类型问题,而是文件打开模式错误:

  • Python2中'rb'和'r'的边界模糊,csv模块可以兼容字节流;但Python3严格区分文本和二进制流,csv.Sniffer().sniff()需要传入字符串,而你用'rb'读取到的是bytes对象,因此触发类型错误。

修复步骤:

  1. 将文件打开模式从'rb'改为文本模式'r',建议同时指定编码(比如utf-8)避免编码问题;
  2. 函数内初始化info和data列表(原代码未定义,会导致NameError)。

修改后的完整代码:

import csv

def parse(filename):
    i = 0
    info = []
    data = []
    
    with open(filename, 'r', encoding='utf-8') as csvfile:
        dialect = csv.Sniffer().sniff(csvfile.read(), delimiters='\t,')
        csvfile.seek(0)
        reader = csv.reader(csvfile, dialect)

        print(reader)
                      
        for line in reader:
            info.append(line)
            print(line)  # 原代码print(x)会输出None,因为append返回None,这里改成打印line更合理
            if line[0] == 'SampleTestPlan':
                i = 1 
            if line[0] == 'AreaPerTest':
                i = 0            
            if i >= 1:
                if i >= 2:
                    a = line[2:]                   
                    a = a[:2]
                    data.append(a)
                i += 1

额外说明:

  • 原代码中x = info.append(line)后print(x)会输出None,因为列表的append()方法没有返回值,直接打印line更符合需求;
  • 补充import csv语句(原代码未显示,确保能正常调用csv模块)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 05:50:27