import glob
  import os
  import csv
  import zipfile
  from io import StringIO
  for name in glob.glob('C:/Users/RAMESH SANTHA/Downloads/download-NIFTY 50-01012020.zip'):
      base = os.path.basename(name)
      filename = os.path.splitext(base)[0]

  datadirectory = 'C:/Users/RAMESH SANTHA/Downloads/'
  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))
  reader = csv.reader(data)
  for row in reader:
     print (row)


我尝试以下代码从包含csv文件的zip文件夹中读取数据并打印行,但出现错误:

data = StringIO.StringIO(zfile.read(csv_file))

AttributeError: type object '_io.StringIO' has no attribute 'StringIO'

最佳答案

只有StringIO.StringIO(),没有io.StringIO()

import io

data = io.StringIO(...)


导入后甚至没有io.

from io import StringIO

data = StringIO(...)




顺便说一句:我认为您使用globjoin()使代码过于复杂。您可以直接在ZipFile中使用文件名,而无需open()

import os
import csv
import zipfile
import io

zip_fullname = 'C:/Users/RAMESH SANTHA/Downloads/download-NIFTY 50-01012020.zip'
zip_file = os.path.basename(zip_fullname)
csv_file = zip_file.replace('.zip', '.csv')

print(zip_file)  # download-NIFTY 50-01012020.zip
print(csv_file)  # download-NIFTY 50-01012020.csv

zfile = zipfile.ZipFile(zip_fullname)
data = io.StringIO(zfile.read(csv_file).decode('utf-8')) # bytes needs to be converted to string
reader = csv.reader(data)
for row in reader:
    print(row)


但是使用pandas应该会更简单

import pandas as pd

df = pd.read_csv('C:/Users/RAMESH SANTHA/Downloads/download-NIFTY 50-01012020.zip')

print(df)

关于python - 如何从zip文件夹中的csv文件读取并将csv文件中的数据保存在数据库中?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59569126/

10-11 06:20
查看更多