Jupyter Notebook阿拉伯语情感分析读取CSV报line contains NULL byte错误
故障根因
- 编码不匹配:阿拉伯语地区生成的CSV通常使用
Windows-1256(cp1256)、UTF-16编码,你指定通用UTF-8编码会出现解析异常,触发空字节报错。 - 存在隐形空字节:文件在下载、跨系统传输、编辑保存过程中被插入了
\x00空字符,原生csv.reader无法识别该字符直接抛出错误。 - BOM头冲突:部分带BOM头的编码文件未指定对应解析参数,会被识别为无效空字节。
修复步骤
- 先检测文件真实编码,执行以下代码获取准确编码值:
import chardet # 二进制读取文件检测编码 with open('Data/train_emoji_ar.csv', 'rb') as f: detect_result = chardet.detect(f.read()) print("文件真实编码:", detect_result['encoding'])
- 修改
read_csv函数,兼容异常字符与对应编码:
def read_csv(filename): phrase = [] emoji = [] # 把上一步获取到的编码填到encoding参数位置 with open (filename, encoding='此处替换为你检测到的真实编码', errors='replace') as csvDataFile: # 读取全部内容并过滤掉空字节 file_content = csvDataFile.read().replace('\x00', '') csvReader = csv.reader(file_content.splitlines()) for row in csvReader: # 跳过字段不足的异常行避免索引报错 if len(row) >= 2: phrase.append(row[0]) emoji.append(row[1]) X = np.asanyarray(phrase) Y = np.asanyarray(emoji, dtype=int) return X, Y
补充说明:如果检测到的编码是带BOM的UTF-8,直接将encoding参数值替换为
utf-8-sig即可。
内容的提问来源于stack exchange,提问作者Abdulmajeed
相关产品推荐
相关产品推荐

