python - 从 Zip 文件中读取 CSV

标签 python csv zip

我有一个 zip 文件目录(大约 10,000 个小文件),每个目录中都有一个 CSV 文件,我正在尝试读取并拆分为多个不同的 CSV 文件。

我设法编写了代码,将 CSV 文件从 CSV 目录中拆分出来,如下所示,它读取 CSV 的第一个属性,并根据将其写入相关 CSV 的内容。

import csv
import os
import sys
import re
import glob

reader = csv.reader(open("C:/Projects/test.csv", "rb"), delimiter=',', quotechar='"')
write10 = csv.writer(open('ouput10.csv', 'w'), delimiter=',', lineterminator='\n', quotechar='"', quoting=csv.QUOTE_NONNUMERIC)
write15 = csv.writer(open('ouput15.csv', 'w'), delimiter=',', lineterminator='\n', quotechar='"', quoting=csv.QUOTE_NONNUMERIC)


headings10=["RECORD_IDENTIFIER","CUSTODIAN_NAME","LOCAL_CUSTODIAN_NAME","PROCESS_DATE","VOLUME_NUMBER","ENTRY_DATE","TIME_STAMP","VERSION","FILE_TYPE"]
write10.writerow(headings10)

headings15=["RECORD_IDENTIFIER","CHANGE_TYPE","PRO_ORDER","USRN","STREET_DESCRIPTION","LOCALITY_NAME","TOWN_NAME","ADMINSTRATIVE_AREA","LANGUAGE"]
write15.writerow(headings15)


for row in reader:
    type = row[0]
    if "10" in type:        
        write10.writerow(row)
    elif "15" in type:
        write15.writerow(row)

所以我现在尝试读取 Zip 文件,而不是浪费时间先提取它们。

这是我在学习了尽可能多的教程之后所拥有的

import glob
import os
import csv
import zipfile
import StringIO

for name in glob.glob('C:/Projects/abase/*.zip'):
    base = os.path.basename(name)
    filename = os.path.splitext(base)[0]


datadirectory = 'C:/Projects/abase/'
dataFile = filename
archive = '.'.join([dataFile, 'zip'])
fullpath = ''.join([datadirectory, archive])
csv = '.'.join([dataFile, 'csv'])


filehandle = open(fullpath, 'rb')
zfile = zipfile.ZipFile(filehandle)
data = StringIO.StringIO(zfile.read(csv))
reader = csv.reader(data)

for row in reader:
    print row

但是会抛出错误

AttributeError: 'str' 对象没有属性 'reader'

希望有人可以告诉我如何更改我的 CSV 读取代码以读取 Zip 文件。

非常感谢

提姆

最佳答案

简单的修复。您正在使用本地 csv 变量覆盖 csv 模块。只需更改该变量的名称:

import glob
import os
import csv
import zipfile
import StringIO

for name in glob.glob('C:/Projects/abase/*.zip'):
    base = os.path.basename(name)
    filename = os.path.splitext(base)[0]


    datadirectory = 'C:/Projects/abase/'
    dataFile = filename
    archive = '.'.join([dataFile, 'zip'])
    fullpath = ''.join([datadirectory, archive])
    csv_file = '.'.join([dataFile, 'csv']) #all fixed


    filehandle = open(fullpath, 'rb')
    zfile = zipfile.ZipFile(filehandle)
    data = StringIO.StringIO(zfile.read(csv_file)) #don't forget this line!
    reader = csv.reader(data)

    for row in reader:
        print row

关于python - 从 Zip 文件中读取 CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9343880/

相关文章:

PHP脚本发送zip文件并在不工作后删除

python - 实现 All/Universal 集

python - 在 NumPy 中检索具有频率数组的数组元素

java - 用Java以OO方式表示逻辑运算

linux - 将多个 header 信息字段附加到文件,直到找到下一个 header

actionscript-3 - AS3 Air — 检查 Zip 以获取音频文件

python - 我如何在错误退出后自动重新启动我的 python 代码?

python - python cv中的值错误

linux - 如何从 Linux/HDFS 导入 CSV 文件到 mongo DB

java - 如何在 Java 中创建一个新的 zip 文件并向其中添加一个大的文件目录?