Python2.7读取CSV到列表时数据不完整且报IOError[Errno0]求助
解决Python2.7读取CSV时的IOError Errno 0及数据不完整问题
我之前在Windows 10上用Python2.7处理CSV文件时,也碰到过几乎一模一样的问题,结合你的情况,给你几个实用的排查和解决方向:
1. 先解决路径转义的坑
你当前的文件路径用了单个反斜杠\,在Python字符串里这会被当成转义字符(比如\w、\M都会被解析成特殊字符),这很可能是引发IO错误的根源。可以用三种方式修正:
- 改用双反斜杠:
'G:\\work and courses\\Medrar\\heirarchies\\hier1.csv' - 用原始字符串(推荐):
r'G:\work and courses\Medrar\heirarchies\hier1.csv' - 直接用正斜杠:
'G:/work and courses/Medrar/heirarchies/hier1.csv'
2. 调整CSV模块的文件打开方式
Python2.7的csv模块和io.open的文本模式兼容性不太好,尤其是Windows下的CRLF换行符处理,容易导致数据截断或IO错误。试试用内置open的二进制模式打开文件,这是Python2.7官方推荐的CSV读取方式:
import csv csv_filename = r'G:\work and courses\Medrar\heirarchies\hier1.csv' directories_lst = [] def fn(): global directories_lst with open(csv_filename, 'rb') as f: # 二进制模式打开,csv模块自动处理换行 reader = csv.reader(f) directories_lst = [row for row in reader]
3. 排查文件被占用的情况
Windows下Errno 0有时候是个“哑巴错误”——实际是文件被其他进程锁定了(比如你用Excel打开着这个CSV文件没关闭),系统没法正常读取。先确认没有其他程序在使用这个CSV,关闭后再运行代码试试。
4. 优化Pandas的读取参数
如果用pandas.read_csv,可以指定引擎和编码参数,避免格式或编码问题导致的数据不完整:
import pandas as pd csv_filename = r'G:\work and courses\Medrar\heirarchies\hier1.csv' # 用python引擎,指定Windows常用的gbk编码(根据你的文件实际编码调整) df = pd.read_csv(csv_filename, engine='python', encoding='gbk') directories_lst = df.values.tolist()
5. 检查CSV文件本身的格式问题
数据不完整也可能是文件自身有格式错误,比如某行有未闭合的引号,导致CSV读取器把多行合并成一行。你可以用文本编辑器打开CSV文件,检查有没有异常的引号、换行符;如果确定没有引号需求,也可以强制CSV模块忽略引号:
reader = csv.reader(f, quoting=csv.QUOTE_NONE)
内容的提问来源于stack exchange,提问作者icarus
相关产品推荐
相关产品推荐

