python 读取csv文件 和 python线程

#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)))  # 获取当前运行的线程数量



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值