不知不觉就第十五课了啊,时间过的真快.......
今天天气很好,来说点降降温的
ⅠCSV
将csv文件读取为字典列表
python处理csv文件-->即逗号分隔值可以用Exce打开查看的纯文本文件,任何编辑器也都可以打开
在csv文件中,值没有类型,所有值都是字符串,不能指定字体颜色等样式,不能指定单元格的宽高,不能合并单元格,没有工作图标,不能嵌入图像图标
我们常常需要读取和处理csv文件的数据。处理csv数据的一个最有用的方法就是把它转换为一个字典列表
DictReader类将会自动地使用csv文件的第一行作为字典的key属性名。DictReader类返回一个将会遍历csv文件所有行的对象。这个文件对象通过open()函数产生。我们提供了open()两个参数–第一个是csv文件名,第二个是模式。在这例子,‘rU’有两个意思。想往常一样,‘r’表示以读模式打开文件。‘U’表明我们将会接受通用换行符–‘n’,‘r’和‘rn’
遍历csv文件
import csv 想要读取csv文件,我们先导包
Dict=csv.DictReader(open('csv.csv','rU')) 先设置一个变量Dict open打开你的csv文件
print([d.keys() for d in Dict]) 设置一个变量d d存在于Dict中, 因为是字典,所以,我们用d.keys()或者d.values()来分别获取他的key和value
csv的内容很少,所以他只是开胃小菜,让你放松放松罢了[]~( ̄▽ ̄)~*
Ⅱ线程(夏日特供--超级冰淇淋套餐) (Emmm......感觉名字有点low( ̄_ ̄|||)
呐呐,我肯定要先说什么是线程
什么是线程:进程中的每个子任务,不能独立存在,CPU执行的最小单位
线程的特点:依赖进程(内存共享,CPU使用独立)启动开销小,线程之间共享数据容易,方便通信,线程不安全。
线程使用的是:threading
线程分线程类和函数线程
我们先来说线程类:
1.继承threading.Thread
2.写构造方法,且必须调用父类的构造方法
3.重写父类的run方法,会在start之后自动调用
4.实现开始方法,如果重写了start()方法,一定要调用父类的start()
需要调用start()方法才可以执行
例:
class aa(threading.Thread): 设置一个class类
def __init__(self):
threading.Thread.__init__(self);
print('aa __init__()')
for i in range(10):
print(self.getName(),i)
time.sleep(0.1) 这里的意思是停顿0.1秒,sleep做停顿
t2=aa()
t1.start()
t2.start()
for i in range(10):
print(threading.current_thread().getName(), i)
time.sleep(0.1)
if i==5:
那个线程调用 那个线程停下
t1.join(0.2)
0.2这个参数意为等待多长时间,就结束停止,恢复就绪状态
print('正在运行的线程',new_th)
input()
线程函数:
线程必须依赖函数实现,不能单独运行。当函数结束,线程结束。所以如果想让线程一直运行,就要想办法让程序不结束,比如在程序最后加一个input(),或死循环
我们来做一道例题,抢票
第一种做法
nums=60
num=0
资源共享
def someting(x):
for i in range(20): 这里是值得注意的,当我们在他下面print()时,会输出三次,也就是说,下面有几个量就输出几次,也就是说,如果range()里的参数是20,那么输出的值就有60个
global nums 声明全局变量
nums=nums-1
global num 声明全局变量
num = num + 1
if nums>0:
time.sleep(0.2)
threading._start_new_thread(someting,("张三",))
threading._start_new_thread(someting,("李四",))
threading._start_new_thread(someting,("王五",))
input()
nums=200
count=0
class qiangpiao(threading.Thread):
def __init__(self,name):
threading.Thread.__init__(self)
self.setName(name)
def run(self):
global nums,count
while True:
if nums==0:
return
nums=nums-1
count=count+1
print("{0}抢到了第{1}张票,剩余{2}张票".format(self.getName(),count,nums))
time.sleep(0.2)
huangniu=qiangpiao('黄牛')
chuangkou=qiangpiao('窗口')
shouji=qiangpiao('手机')
chuangkou.start()
shouji.start()
多线程共享数据
到这里今天要说的说完了,今天的事实上并不是很难理解,说真的大早上起来写代码,我脑袋都大了.
你问我为什么不晚上写,拜托,我晚上不早睡,第二天怎么早起写代码( ̄_ ̄|||)
等等,我还有一句话:
如果我是线程,那你就是import threading,因为没有你,我就什么都不想做,再见.