哎一古~~~第十五课(CSV,线程)

不知不觉就第十五课了啊,时间过的真快.......

今天天气很好,来说点降降温的

Ⅰ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()方法才可以执行

例:

import threading,time     先导包
class aa(threading.Thread):   设置一个class类
     def __init__(self):    
        threading.Thread.__init__(self);
        print('aa __init__()')
    def run(self):
        for i in range(10):     
            print(self.getName(),i)
            time.sleep(0.1)
    这里的意思是停顿0.1秒,sleep做停顿
t1=aa()
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这个参数意为等待多长时间,就结束停止,恢复就绪状态
new_th=threading.enumerate()
print('正在运行的线程',new_th)
input()

接下来我们来说

线程函数:

线程必须依赖函数实现,不能单独运行。当函数结束,线程结束。所以如果想让线程一直运行,就要想办法让程序不结束,比如在程序最后加一个input(),或死循环

我们来做一道例题,抢票

第一种做法

import threading,time
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:
            print(x,'你抢到第:',num,"张,"'车票还有:',nums)
            time.sleep(0.2)

threading._start_new_thread(someting,("张三",))
threading._start_new_thread(someting,("李四",))
threading._start_new_thread(someting,("王五",))
input()
第二种:
import threading,time
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)
if __name__=='__main__':
    huangniu=qiangpiao('黄牛')
    chuangkou=qiangpiao('窗口')
    shouji=qiangpiao('手机')
    huangniu.start()
    chuangkou.start()
    shouji.start()

    多线程共享数据

到这里今天要说的说完了,今天的事实上并不是很难理解,说真的大早上起来写代码,我脑袋都大了.

你问我为什么不晚上写,拜托,我晚上不早睡,第二天怎么早起写代码( ̄_ ̄|||)

等等,我还有一句话:

                    如果我是线程,那你就是import threading,因为没有你,我就什么都不想做,再见.

 


 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值