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对象,因此触发类型错误。
修复步骤:
- 将文件打开模式从
'rb'改为文本模式'r',建议同时指定编码(比如utf-8)避免编码问题; - 函数内初始化
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
相关产品推荐
相关产品推荐

