#usr/bin/python #-*-coding:utf-8-*- """ 读取 csv 文件 csv 文件: 指有以下特征的任何文件: 1,纯文本,使用某个字符集,比如ASCII、Unicode、EBCDIC或GB2312; 2,由记录组成(典型的是每行一条记录); 3,每条记录被分隔符分隔为字段(典型分隔符有逗号、分号或制表符;有时分隔符可以包括可选的空格); 4,每条记录都有同样的字段序列。 书写规则: 1 开头是不留空,以行为单位。 2 可含或不含列名,含列名则居文件第一行。 3 一行数据不跨行,无空行。 4 以半角逗号(即,)作分隔符,列为空也要表达其存在。 5 列内容如存在半角引号(即"),替换成半角双引号("")转义,即用半角引号(即"")将该字段值包含起来。 6 文件读写时引号,逗号操作规则互逆。 7 内码格式不限,可为 ASCII、Unicode 或者其他。 8 不支持数字 9 不支持特殊字符 """ import csv f = open(r"01.csv","rU",encoding="utf-8") # 打开一个 csv 文件 reader = csv.DictReader(f) # 读取 f 指定的文件 print(reader) print(type(reader)) for i in reader: # 遍历输出, 输出 (总行数-1) 个 OrderedDict([]) 列表内嵌套元组 print(i) # 元组个数 = 当前行元素个数与首行元素个数的较大者 # 每个元组为两个元素,首行元素是第一个元素,当前行元素是第二个元素, # 首行元素没有的,格式为:(None,["当前行元素"]) # 当前行元素没有的,格式为:("首行元素",None) print("---------------------------") f.seek(0) for i in reader: # i.popitem() print("该行的key是{},value是{}".format(i.keys(),i.values())) print("----------------") f.seek(0) print([i.keys() for i in reader]) f.seek(0) print([i.values() for i in reader]) print("-------------------------------------------") print(dir(i))
#usr/bin/python #-*-coding:utf-8-*- import threading as t import time c1 = t.currentThread() # 获取当前线程 print("当前线程:{}".format(c1.name)) print("当前线程:{}".format(c1.getName())) """ 以类的方式实现线程 """ class MyThread(t.Thread): # 创建类,继承 def __init__(self): # 调用父类构造方法 t.Thread.__init__(self) def run(self): # 重写 run for i in range(6): # 或 print(t.currentThread().getName(),i) # == print(self.getName(),i) print(self.name,i) time.sleep(0.1) t1 = MyThread() # 创建线程1:t1 t2 = MyThread() # 创建线程2:t2 t1.setName("线程1") # 给线程 t1 设置名称 print(t1.getName()) # 获取线程 t1 的名称 print(t2.name) # 没有设置名称就按创建顺序取默认名 :Threat-n list1 = t.enumerate() # 获取所有正在运行的线程到一个列表,此时,只有一个主线程 print("正在运行的线程:{}".format(list1)) t1.start() # 线程 t1 开始执行,执行的是 run 函数 t2.start() # 线程 t2 开始执行 """ t1.run() t2.run() t1 和 t2 此时只是调用了 run 函数,而并不是以线程的方式在运行, 其执行顺序按正常的代码顺序执行,而不是线程1和线程2交替执行, """ list1 = t.enumerate() # 此时,有三个线程在运行 print("正在运行的线程:{}".format(list1)) print("当前有{}个线程在运行".format(len(list1))) # 获取当前运行的线程数量 print("当前有{}个线程在运行".format(t.activeCount())) # 获取当前运行的线程数量 for i in range(6): print(t.currentThread().getName(), i) time.sleep(0.1) if i == 1 : t1.join(0.2) """ t1.join() 表示 t1 阻断主线程而强制加入执行,t2 正常执行 不加参数,表示 t1 执行完,主线程才开始接着被阻断前的状态执行 加参数 n ,表示阻断时间,即阻断 n 秒后主线程接着开始执行 """ print("-----------------------------------------------------------------------------------------") """ 以函数方式实现线程 1,函数运行完,线程就结束,在末尾添加 input(),可以不结束线程 2,可以实现资源共享 """ def func1(x): for i in range(x): print(i) time.sleep(0.2) t3 = t._start_new_thread(func1,(5,)) t4 = t._start_new_thread(func1,(8,)) input() """ 多线程 共享资源""" import threading as T import time nums = 50 count = 0 class GetTicket(T.Thread): def __init__(self,name): T.Thread.__init__(self) self.name = name # == self.setName(name) def run(self): global nums ,count while True: if nums == 0: return nums = nums - 1 count = count + 1 print("{}抢到了{},还有{}".format(self.name,count,nums)) # self.name == self.getName() time.sleep(0.1) if __name__ == "__main__": tom = GetTicket('tom') jim = GetTicket("jim") bob = GetTicket("bob") tom.start() jim.start() bob.start() print("\t\t当前有{}个线程在运行".format(T.activeCount())) list1 = T.enumerate() # 此时,有三个线程在运行 print("正在运行的线程:{}".format(list1)) print("当前有{}个线程在运行".format(len(list1))) # 获取当前运行的线程数量