如何从包含千个CSV文件的大文件中提取所有CSV并存入列表?
嘿,我猜你说的“大文件”应该是个压缩包(比如ZIP格式)吧?毕竟直接把上千个CSV塞进单个文件里,最常见的方式就是用压缩包归档~你的初始思路方向没错,但得先把这个大文件的读取/解压逻辑搞定,下面给你分情况说怎么实现:
方法1:处理ZIP格式的归档文件
这是最常见的场景,用Python自带的zipfile模块就能轻松搞定,不需要额外安装依赖:
import zipfile import csv csv_file_list = [] # 替换成你的实际大文件名 with zipfile.ZipFile("your_big_file.zip", "r") as zip_ref: # 遍历压缩包里的所有文件 for file_name in zip_ref.namelist(): # 只筛选CSV文件 if file_name.endswith(".csv"): # 打开压缩包里的单个CSV文件 with zip_ref.open(file_name) as csv_file: # 解码文件内容并转为行列表(如果CSV是其他编码,把utf-8换成对应编码,比如gbk) csv_content = csv_file.read().decode("utf-8").splitlines() # 用csv.reader解析内容,也可以用csv.DictReader转成字典格式 csv_reader = csv.reader(csv_content) # 把解析后的整个CSV内容加入列表,要是只想存文件名就append(file_name) csv_file_list.append(list(csv_reader))
方法2:如果是TAR格式的压缩包(比如.tar/.tar.gz)
如果你的大文件是TAR类压缩包,用tarfile模块的逻辑类似:
import tarfile import csv csv_file_list = [] # 替换成你的实际文件名,r:gz对应gzip压缩的TAR包,普通TAR用r: with tarfile.open("your_big_file.tar.gz", "r:gz") as tar_ref: for member in tar_ref.getmembers(): # 只处理文件类型的条目,并且是CSV文件 if member.isfile() and member.name.endswith(".csv"): file_obj = tar_ref.extractfile(member) if file_obj: csv_content = file_obj.read().decode("utf-8").splitlines() csv_reader = csv.reader(csv_content) csv_file_list.append(list(csv_reader))
特殊情况:如果是拼接式的大文件
要是你的“大文件”不是压缩包,而是把所有CSV内容直接拼接在一起的文件(比如每个CSV之间有特定分隔符),那你得先明确拆分规则(比如每个CSV开头有固定标识),再拆分后读取。不过这种场景很少见,优先考虑上面的压缩包方案就行。
最后提醒下:记得把代码里的文件名换成你实际的文件路径,要是CSV的编码不是UTF-8,调整decode()里的参数就好~
内容的提问来源于stack exchange,提问作者benito.cano
相关产品推荐
相关产品推荐

