Python中下载Zip文件并解析内部CSV文件的问题求助
解决Zip解压后CSV解析的问题
嘿,我一眼就瞅出问题所在啦——你这段脚本里读取CSV的方式错了!
你现在用open(files[0], 'r')是想读取本地磁盘上的文件,但实际上你下载的Zip文件是加载在内存里的,并没有把里面的CSV写到本地磁盘,所以Python会找不到这个文件,自然就解析失败了。
修正后的代码
直接通过ZipFile对象打开内部的CSV文件就行,不用先把文件存到本地,这样更高效也不会出错:
import csv from requests import get from io import BytesIO from zipfile import ZipFile # 下载并加载Zip文件到内存 request = get('https://example.com/some_file.zip') zip_file = ZipFile(BytesIO(request.content)) files = zip_file.namelist() # 直接读取Zip内的CSV文件(无需写入本地) with zip_file.open(files[0]) as csvfile: # 先把二进制内容解码为字符串,再按行拆分 # 注意:如果你的CSV用的是其他编码(比如GBK),替换这里的utf-8即可 csv_content = csvfile.read().decode('utf-8').splitlines() csvreader = csv.reader(csv_content) for row in csvreader: print(row)
额外注意事项
- 编码问题:如果你的CSV文件不是UTF-8编码(比如中文常用的GBK),一定要把
decode('utf-8')改成对应的编码,否则会出现乱码或者解码错误。 - 文件校验:最好加个判断确保你读取的是CSV文件,避免误读到Zip包里的其他文件:
csv_files = [f for f in files if f.endswith('.csv')] if not csv_files: print("Zip包里没有CSV文件哦!") else: with zip_file.open(csv_files[0]) as csvfile: # 后续处理逻辑
这样调整后,你的脚本应该就能正常解析CSV内容啦!
内容的提问来源于stack exchange,提问作者Magnotta
相关产品推荐
相关产品推荐

