16.1.1分析csv文件头
首先在教材的随书下载网站 ituring.cn/book/1861 中下载 sitka_weather_07-2014.csv,然后把这个文件放在自己编写程序的相同文件夹下,名字为highs_lows.py,内容如下:
import csv
#文件名存在 file_name 中
file_name = 'sitka_weather_07-2014.csv'
#打开这个文件
with open(file_name) as f:
#创建一个和文件file_name 关联的阅读器(就是下面名字是 reader 的那个变量)
reader = csv.reader(f)
#调用next方法,返回文件的下一行
header = next(reader)
print(header)
~
16.1.2打印文件头及其位置
先看自己编写的,打印文件头和位置:
import csv
file_name = 'sitka_weather_07-2014.csv'
with open(file_name) as f:
reader = csv.reader(f)
header_row = next(reader)
for i in range(len(header_row)):
print(str(i)," ",header_row[i])
再看书上的方法(用enumerate获取每个数据的索引和值):
import csv
file_name = 'sitka_weather_07-2014.csv'
with open(file_name) as f:
reader = csv.reader(f)
header_row = next(reader)
for index,column_reader in enumerate(header_row):
print(index,column_reader)
16.1.3提取并读取数据
下载好数据后,把文件sitka_weather_07-2014.csv 放到和源文件同一个文件夹下:
#fun.py
#导入csv
import csv
#导入datetime
from datetime import datetime
#定义一个函数,获取最高、最低气温和日期的列表
def get_dates_highs(file_name,dates,highs,lows):
with open(file_name) as f:
#利用csv.reader(file_name)创建一个阅读器
reader = csv.reader(f)
#使阅读器指向下一行(第一行)
next(reader)
#从第一行下面(第二行)开始读取数据(最高气温、最低气温和日期)
for row in reader:
#用datetime.strptime()函数来解读一个日期
# %Y 表示四个数字表示的年份
#%m 数字表示的月份(01-12)
#%d 数字表示的日(01-31)
current_date = datetime.strptime(row[0],"%Y-%m-%d")
high = int(row[1])
low = int(row[3])
dates.append(current_date)
highs.append(high)
lows.append(low)
#highs_and_lows.py
import matplotlib.pyplot as plt
from datetime import datetime
from fun import get_dates_highs
#定义 file_name
file_name = 'sitka_weather_07-2014.csv'
#定义三个列表,一会存储最高、最低气温和日期
highs = []
dates = []
lows = []
#调用函数get_dates_highs,获取以上三个变量的值(列表)
get_dates_highs(file_name,dates,highs,lows)
#定义图像的大小,dpi=128每英寸128像素,figsize=(10,6)表示长是10英寸,宽是6英寸
fig = plt.figure(dpi= 128,figsize=(10,6))
#画图函数,dates作为横坐标,highs作为纵坐标,颜色红色
plt.plot(dates,highs,c='red')
#话凸函数,dates作为横坐标,lows作为纵坐标,颜色蓝色
plt.plot(dates,lows,c='blue')
#可以用下面这句代码给绘图区域着色alpha代表颜色透明度,0表示完全透明,1表示完全不透明
#
#plt.fill_between(dates,highs,lows,facecolor='blue',alpha=0.3)
#fig.autofmt_xdate()绘制倾斜的日期标签,以免它们重叠
fig.autofmt_xdate()
#定义标题(图片正上方的部分的标题)
plt.title("Daily high and low temperatures,July 2014",fontsize=14)
#定义横轴的标签
plt.xlabel('',fontsize=14)
#定义纵轴的标签
plt.ylabel('Temperature (F)',fontsize=14)
#定义刻度的大小(就是数轴上那些1,2,3...的大小)
plt.tick_params(axis='both',which='major',labelsize=14)
#显示图片
plt.show()
注意:文件中读取的最高气温和最低气温都是字符串,为了让程序把他们当成整数,必须用int(),进行转换,否则画出图像后纵轴上会乱七八糟,数字不按照大小排列。



