上课演示CSV文件读写及列表推导式用到的例子,记录一下。
列表推导式相当于循环,简洁方便,速度也不慢。
设有文件visit2017.txt,是CSV格式,存有一年的读者刷卡入馆记录,文件很大,其中一条如下:
“145022187 “,”张无忌”,”学生”,”2工程系”,”2017/1/1 9:06:55”
例一:查看是否有姓"莫","蒲","仝"的同学
##import csv
##vs=open("D:图书馆读者visit2017.txt","r")
##rd=csv.reader(vs)
##print(type(rd))
##ls=list(rd)
##ls2=[i for i in ls if i[1][0] in ["莫","蒲","仝"]]
##ls3=["_".join(i[0:4]) for i in ls2]
##set1=set(ls3)
##for row in set1:
## print(row)
#例二:统计某班(学号是1650151*)各位入馆次数
##import csv
##vs=open("D:图书馆读者visit2017.txt","r")
##rd=csv.reader(vs)
##ls=list(rd)
##ls2=[[i[0].strip(),i[1],i[4]] for i in ls if i[0][0:7]=="1650151"]
##counts={}#生成的是字典,不是集合
##for i in ls2:
## counts[i[1]]=counts.get(i[1],0)+1
#get() "键"存在,返回"值",否则返回默认值0
##items=list(counts.items()) #返回键值对
##items.sort(key=lambda x:x[1],reverse=True)
##for i in items:
## print(i[0],i[1])
#
###例三:生成某同学到馆时间区间(前后15秒),
##import csv
##from datetime import datetime
##vs=open("D:图书馆读者visit2017.txt","r")
##rd=csv.reader(vs)
###print(type(rd))
##ls=list(rd)
##ls2=[i for i in ls if i[1]=="张无忌"]
##ls3=[ [i[0].strip(),i[1],datetime.strptime(i[4],"%Y/%m/%d %H:%M:%S").timestamp()] for i in ls2]
#注意时间字符串和时间戳的转换
##ls4time=[[i[2]-15,i[2]+15] for i in ls3] #前后15秒
##
##for row in ls4time:
## print(row)
###写入文件
##with open("D:图书馆读者zab_time.txt","w") as fp:
## for i in ls4time:
## fp.writelines(str(i[0])+","+str(i[1])+"n")
###例四:某同学到馆时间和另一同学比,是否较一致
##import csv
##from datetime import datetime
##vs=open("D:图书馆读者visit2017.txt","r")
##rd=csv.reader(vs)
###print(type(rd))
##ls=list(rd)
##ls2=[i for i in ls if i[1]=="段誉"]
##ls3=[ [i[0].strip(),i[1],datetime.strptime(i[4],"%Y/%m/%d %H:%M:%S").timestamp()] for i in ls2]
##ls4time=[[i[2]-300,i[2]+300] for i in ls3] #前后5分钟
##
##lsm2=[i for i in ls if i[1]=="王语嫣"]
##lsm3=[datetime.strptime(i[4],"%Y/%m/%d %H:%M:%S").timestamp() for i in lsm2]
##s=0
##for i in lsm3:
## for j in ls4time:
## if j[0]<i<j[1]:
## print(j[0],i,i-j[1],datetime.fromtimestamp(i).strftime("%Y/%m/%d %H:%M:%S") )
## s+=1
##print(s)
#找和某同学访问时间一致的人
##import csv
##from datetime import datetime
##vs=open("D:图书馆读者visit2017.txt","r")
##rd=csv.reader(vs)
###print(type(rd))
##ls=list(rd)
##ls2=[i for i in ls if i[1]=="郭靖"]
##ls3=[ [i[0].strip(),i[1],datetime.strptime(i[4],"%Y/%m/%d %H:%M:%S").timestamp()] for i in ls2]
##ls4time=[[i[2]-30,i[2]+30] for i in ls3]
##xh=set([i[0] for i in ls])
##lsxh=list(xh)
##countls=[]
##for xh in lsxh: #多重循环,运行时间稍长
## lsm2=[i for i in ls if i[0]==xh]
## lsm3=[datetime.strptime(i[4],"%Y/%m/%d %H:%M:%S").timestamp() for i in lsm2]
## s=0
## for i in lsm3:
## for j in ls4time:
## if j[0]<i<j[1]:
## s+=1
## if s>8:
## countls.append([xh,s])
##for i in countls:
## print(i)
查得郭靖经常和黄蓉一起进馆,大数据时代要保护好数据才能保护隐私。