实验要求:1.处理存储在存储库或文件中的静态记录。
实验内容:
1.使用前面定义的打包器函数将数据集保存到本地硬盘。
2.将数据恢复为列表或Python字典。
源代码:
import urllib.request as urllib2 #urllib包提供了一个高级接口,用于编写需要与HTTP服务器、FTP服务器和本地文件交互的客户端。典型的应用程序包括从网页抓取数据、自动化、代理、Web爬虫等。urllib.request用途是为了从Web服务器中获取数据。
import requests, io, os, os.StringIO #requests库方便爬虫,io库可以读写文件,OS库可以用来处理文件路径,和进程管理。Stringio对内存文件实现读写。
import tarfile, zipfile, gzip #tarfile库用于压缩包,zipfile库实现压缩文件信息提取和解压到当前目录。gzip也与压缩解压文件有关。
def unzip_from_UCI(UCI_url, dest=’’):
“”"
Downloads and unpacks datasets from UCI in zip format
“”"
response = requests.get(UCI_url) #此时得到的是整个页面的信息
compressed_file = io.BytesIO(response.content) #io.bytesio用于对二进制数据操作,将网页中的内容初始化为二进制文件保存在compressed_file对象中
z=zipfile.ZipFile(compressed_file) #创建一个压缩文件z,将二进制文件写入zip文件中
print(‘Extracting in %s’ % os.getcwd()+’\’+dest) # os.getcwd()用于返回当前工作目录,此处功能是提示csv文件的保存目录
for name in z.namelist():
if ‘.csv’ in name:
print (’\tunzipping %s’ %name) #正则表达式处理格式一致但是名字不同的文件
z.extract(name, path=os.getcwd()+’\’+dest) #将文件保存在当前工作目录中
def gzip_from_UCI(UCI_url, dest=’’):
“”"
Downloads and unpacks datasets from UCI in gzip format
“”"
response = urllib2.urlopen(UCI_url)
compressed_file = io.BytesIO(response.read())
decompressed_file=gzip.GzipFile(fileobj=compressed_file)
filename =UCI_url.split(’/’)[-1][:-3]
with open(os.getcwd()+’\’+filename, ‘wb’) as outfile:
outfile.write(decompressed_file.read())
print(‘File %s decompressed’ % filename)
def tarhzip_from_UCI(UCI_url, dest=’.’):
“”"
Downloads and unpacks datasets from UCI in tar.gz format
“”"
response = urllib2.urlopen(UCI_url)
compressed_file =StringIO.StringIO(response.read())
tar=tarfile.open(mode=“r:gz”, fileobj=compressed_file)
tar.extractall(path=dest)
datasets=tar.getnames()
for dataset in datasets:
size = os.path.getsize(dest+’\’+dataset)
print(‘File %s is %i bytes’ % (dataset,size))
tar.close
def load_matrix(UCI_url):
“”"
Downloads datasets from UCI in matrix form
“”"
return np.loadtxt(urllib2.urlopen(UCI_url))
UCI_url=‘https://archive.ics.uci.edu/ml/machine-learning-databases/00275/Bike-Sharing-Dataset.zip’
unzip_from_UCI(UCI_url, dest=‘bikesharing’) #函数功能是从指定url中获取数据,然后创建一个zip文件,将二进制数据写入zip文件中,并保存到当前工作目录中
import os,csv #csv库与csv格式的读写有关
local_path = os.getcwd()
source=‘bikesharing\hour.csv’
SEP=’,’#We define this for being able to easily change it as required by the file
with open(local_path+’\’+source,‘rt’)as R: #打开保存在本地的二进制文件
iterator = csv.reader(R, delimiter =SEP) #csv.reader创建一个迭代器,从csv文件中读取每一行作为字符串返回
for n ,row in enumerate(iterator): #enumerate将一个字符串序列变为带索引的序列
if n==0:
header=row #将第一行的字符串序列赋给header变量。只有第一行是各个属性,第二行开始都是数字
else:
#DATA PROCESSING placeholder
#MACHINE LEARNING placeholder
pass #注释必须与代码对齐
print(‘Total rows: %i’ % (n+1))
print(‘Header: %s’ % ‘,’.join(header))
print(‘Sample values: %s’ %’, '.join(row))
with open(local_path+’\’+source, ‘rt’) as R:
iterator = csv.DictReader(R, delimiter=SEP) #与reader不同的是,此时生成字典,reader生成字符串,字典的方法就是有了标签,但不如带索引的字符串那样有序
for n,row in enumerate(iterator):
#DATA PROCESSING placeholder
#MACHINE LEARNING placeholder
pass
print (‘Total rows: %i’ % (n+1))
print (‘Sample values: %s’ % str(row)) #str为格式转换,将字典的键和值都变成一个字符串类型
实验总结:
在本次实验中学习了几个python包的使用方法,利用python可以完成从网页获取数据,存储数据,读取流数据的整套操作。学习了静态记录下的顺序提取记录。