使用Pandas读取CSV文件触发OSError:初始化文件失败
解决Pandas读取含德语特殊字符CSV文件的问题
看来你在读取带德语特殊字符的CSV时遇到了两个小麻烦,我来帮你一步步拆解解决:
第一个问题:直接用pd.read_csv触发OSError: Initializing from file failed
这个报错在处理含特殊字符的文件时很常见,结合你的场景(同目录XLS正常访问、文件有德语字符),可以优先试试这几个方案:
显式指定文件编码:德语里的ä、ö、ü、ß这类特殊字符,通常用
latin-1(也叫iso-8859-1)或者utf-8编码,你可以直接在read_csv里指定编码参数:df = pd.read_csv(r'path to file', sep=';', encoding='latin-1') # 如果latin-1不行,再试试utf-8 # df = pd.read_csv(r'path to file', sep=';', encoding='utf-8')切换Python引擎读取:Pandas默认用C语言实现的引擎,虽然速度快,但对特殊字符或者格式稍复杂的文件兼容性不如Python引擎,试试切换引擎:
df = pd.read_csv(r'path to file', sep=';', engine='python', encoding='latin-1')简化文件路径:哪怕用了原始字符串
r'',如果路径里包含空格、德语字符或者非ASCII字符,偶尔也会触发路径解析问题,你可以把文件移到一个路径简单的目录(比如C:\temp\data.csv)再测试,排除路径的影响。
第二个问题:把csv.reader对象传给pd.read_csv触发ValueError
这个其实是个小误区——pd.read_csv并不接受csv.reader这种迭代器作为输入,它需要的是文件路径字符串、open()返回的文件对象或者字节流。如果你想先用csv库读取再转成DataFrame,可以这样写:
import csv import pandas as pd rows = [] # 同样要指定正确的编码 with open(r'path to file', 'r', encoding='latin-1') as f: reader = csv.reader(f, delimiter=';') for row in reader: rows.append(row) # 把读取到的行转为DataFrame,第一行作为表头 df = pd.DataFrame(rows[1:], columns=rows[0])
额外排查建议
- 检查文件完整性:虽然csv库能读取首行,但10MB的大文件可能存在局部编码异常或者损坏的情况,你可以用Notepad++这类编辑器打开文件,查看是否有乱码、异常换行或者不可见字符。
- 尝试
pd.read_table替代:read_table默认用制表符分隔,但可以指定sep=';',有时候能解决一些引擎兼容的小问题:df = pd.read_table(r'path to file', sep=';', encoding='latin-1', engine='python')
内容的提问来源于stack exchange,提问作者rStorms
相关产品推荐
相关产品推荐

