Python pd.read_csv读csv报UnicodeDecodeError如何添加r原始字符串前缀
问题相关代码
from os import listdir from os.path import join, isfile import pandas as pd # 为指定区域创建日志文件路径 region_log_filepath = join(log_files_folder_path, region) # 存储所有文件路径 files = [join(region_log_filepath, file) for file in listdir(region_log_filepath) if isfile(join(region_log_filepath, file))] for file in files : if file.endswith('csv'): filename = (file.split('Log-')[-1]).split('.csv')[0] print(f'\nreading file: {filename}') log_file = pd.read_csv(file,encoding='unicode_escape')
运行代码抛出如下错误:
UnicodeDecodeError: 'unicodeescape' codec can't decode bytes in position 26850-26851: truncated \UXXXXXXXX escape
核心说明
首先明确:r''原始字符串前缀是Python语法层面的标记,仅对代码里直接写死的字符串字面量生效,无法直接给动态生成的file变量加r前缀。如果你的路径是硬编码在代码里的,直接在定义路径字符串的时候加r前缀即可,从根源避免反斜杠被识别为转义符:
# 硬编码路径时直接加r前缀 log_files_folder_path = r'D:\project\log_files' region = r'north_china'
后续用os.path.join拼接出来的路径会自动处理转义逻辑,不需要额外处理。
真正的报错原因与修复方案
你当前遇到的报错本质不是路径转义问题,是encoding参数配置错误:
unicode_escape是Python用来解析源码中Unicode转义序列的专用编码,不是用来读取普通CSV文件的- 当CSV文件内容里存在单独的
\字符时,unicode_escape编码会把它识别为转义符开头,找不到后续完整的转义序列就会抛出你看到的截断错误
直接把read_csv的编码参数换成CSV文件实际使用的编码即可,按优先级测试这几个常用编码即可:
# 优先试通用utf-8 log_file = pd.read_csv(file, encoding='utf-8') # utf-8报错就试国内Windows常用的gbk # log_file = pd.read_csv(file, encoding='gbk') # 以上都报错可以试latin-1,支持任意字节读取不会抛解码错误 # log_file = pd.read_csv(file, encoding='latin-1')
内容的提问来源于stack exchange,提问作者Soumya Pandey
相关产品推荐
相关产品推荐

