Python 3.5中csv.reader读取Excel CSV文件无返回结果求助
为什么csv.reader读取Excel格式CSV时没有返回内容?
我来帮你排查这个问题,你遇到的情况其实挺常见的,咱们一步步拆解可能的原因:
1. 你可能只是创建了reader对象,但没有迭代它
csv.reader返回的是一个迭代器对象,它不会主动加载所有数据,必须通过遍历(比如for循环)才能获取内容。如果你的代码只停留在创建reader这一步,自然看不到任何输出。
试试补充遍历逻辑:
import csv with open('test.csv') as f: reader = csv.reader(f, dialect='excel') # 必须迭代reader才能拿到数据 for row in reader: print(row)
2. 文件编码不匹配导致读取异常
虽然open函数返回正常,但如果CSV文件的编码和你默认打开的编码不一致(比如Windows下常见的GBK、带BOM的UTF-8),会导致reader无法解析内容。
可以尝试指定编码打开文件:
# 处理带BOM的UTF-8格式 with open('test.csv', encoding='utf-8-sig') as f: reader = csv.reader(f, dialect='excel') for row in reader: print(row)
如果是GBK编码的文件,把encoding改成gbk试试。
3. dialect参数和实际文件格式不匹配
虽然你指定了dialect='excel',但有些CSV文件的分隔符、换行符可能和Excel默认的CSV规范有差异(比如用分号代替逗号分隔)。
可以手动明确指定分隔符和引号字符:
reader = csv.reader(f, delimiter=',', quotechar='"')
先确认你的文件确实是用逗号分隔的,如果不是,把delimiter改成对应的符号即可。
4. 文件指针位置异常
如果在创建reader之前,你对文件对象做过读取操作(比如f.read()),文件指针会跳到文件末尾,这时候reader就读不到任何内容了。
可以重置文件指针到开头:
with open('test.csv') as f: # 重置指针到文件起始位置 f.seek(0) reader = csv.reader(f, dialect='excel') for row in reader: print(row)
最优先排查的应该是第一个原因——有没有迭代reader对象,大部分情况下都是这个问题导致的。如果试过之后还是不行,再依次检查编码和格式问题。
内容的提问来源于stack exchange,提问作者Gilles Criton
相关产品推荐
相关产品推荐

