• python学习笔记(三)-元组、集合、文件操作、json模块


    1、元组

    1 #元组,不可变的list
    2 #需要一个不可以被改变的list,就使用元组
    3 t = ()#空的元组
    4 t = ('127.0.0.1',3306,'root','123456')#元组
    5 print(t[1])#元组取值,与list一样
    6 # t[1] = 3308  元组不能修改,修改会报错
    7 print(t.count(3306))#计算元素的个数
    8 print(t.index(3306))#获取元素的位置

    2、两种文件打开方式

    1 #使用open打开文件,需要使用后关闭文件
    2 f = open('user3.txt', 'a+', encoding= 'utf-8')
    3 print(f.read())
    4 f.close()
    5 
    6 # 使用with打开文件,文件会自动关闭,可以一次打开多个文件
    7 with open('user3.txt','a+',encoding='utf-8') as f,open('a.txt','w') as f2:
    8     f.seek(0)
    9     print(f.read())

    3、文件读写

     1 li = ['abc', 'xiaozi', 'xiaobai', 'xiaohei', 'xiaoming', 'xiaolan']
     2 
     3 #读文件
     4 f = open('names.txt','r',encoding='utf-8')#打开一个文件,可以写绝对路径
     5 res = f.read()#使用read方法读取文件全部内容
     6 print(res)
     7 res2 = f.read()#第二次再读取时光标位置指向末尾,所以读不到数据
     8 print('res2...',res2)
     9 f.close()#文件操作完毕需要关闭文件
    10 
    11 #写文件
    12 f = open('names.txt','w',encoding='utf-8')
    13 f.write(','.join(li))#只能是写字符串
    14 f.write(str(li))
    15 f.write('abc,123
    ')#
    是换行符
    16 f.write('bcd,123
    ')
    17 f.write('bcd3,123
    ')
    18 f.close()
    19 
    20 #其它方法
    21 f.readline()#读取一行
    22 f.readlines()#一行一行读取,存成一个list
    23 f.seek(0)#设置文件指针到开头
    24 f.tell()#返回文件指针的位置
    25 f.flush()#把缓冲区的内容写进文件
    26 l = ['123','456','789']
    27 f.writelines(l) #传一个list,把list中的元素一个一个写进文件
    28 
    29 #循环文件,会一行一行的读取
    30 with open('a.txt',encoding='utf-8') as f :
    31     for line in f:
    32         print('每次内容:',line)

    4、文件打开模式

    f = open('a.txt','r',encoding='utf-8')
    #文件打开模式
    #r  只读,文件指针在开头,默认的模式,文件不存在报错
    
    #w  只写,打开后清空原来的文件内容,文件不存在自动创建
    
    #a  追加模式,只能写不能读,文件指针指向末尾,追加在内容后面,文件不存在会创建
    
    #r+  读写模式,可以读可以写,文件指针指向文件开头,写会覆盖原内容,文件不存在报错
    
    #w+  写读模式,可写可读,打开后清空原来文件内容,文件不存在自动创建
    
    #a+  追加读模式,文件指针放在文件末尾,追加内容在后面,使用seek改变指针位置写文件时不生效,只能追加在末尾,读文件时可以使用seek改变位置,文件不存在时自动创建
    
    #只要是r文件不存在都会报错,只要是w打开文件都会清空内容,a模式是在末尾追加内容

     5、文件处理实例--修改文件

     1 #1、简单直接粗暴的
     2     #1、先读取到所有的内容,修改
     3     #2、然后清空原有文件的内容,再写入新的
     4 
     5 f = open('account.txt','a+')
     6 f.seek(0)
     7 l = []
     8 for line in f:
     9     line = line.strip()
    10     line_list = line.split(',')
    11     sum = int(line_list[1])+int(line_list[2])+int(line_list[3])
    12     avg = sum//3
    13     new_line = '%s,%s
    '%(line,avg)
    14     l.append(new_line)#把所有的数据都存进list里
    15 f.seek(0)
    16 f.truncate()
    17 f.writelines(l)#把list写进文件
    18 
    19 #2、高效的方式
    20  #打开2个文件 a b,a只负责读,b只负责写,一次只处理一条数据,比较高效
    21 import os
    22 with open('account.txt') as  f,open('account2','w') as fw:
    23     for line in f:
    24         line = line.strip()
    25         line_list = line.split(',')
    26         sum = int(line_list[1])+int(line_list[2])+int(line_list[3])
    27         avg = sum//3
    28         new_line = '%s,%s
    '%(line,avg)
    29         fw.write(new_line)
    30         fw.flush() #立即写入文件
    31 os.remove('account.txt')
    32 os.rename('account2','account.txt')

    6、实例--监控ip地址

    # 找到每分钟访问超过20次的ip地址
    #1、打开文件
    #2、依次读取文件里面的每行
    #3、取到每行里面的ip地址  split
    #4、存到字典里面,ip做key,次数做value
    #5、循环字典,如果value大于20,那么就输出出来
    # {'ip1':1,'ip2':1,'ip3':1 }
    # 192.168.90.90 - - [04/Jun/2017:03:44:13 +0800] "GET /wp-includes/logo_img.php HTTP/1.0" 302 161 "http://wp-includes/logo_img.php" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/533.4
    # 192.168.90.90 - - [04/Jun/2017:03:44:13 +0800] "GET /blog HTTP/1.0" 301 233 "http://wp-includes/logo_img.php" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/533.4 (KHTML, like Gecko)
    
    import time
    point = 0#用来记录文件指针的位置
    while True:
        with open('access.log',encoding='utf-8') as f:
            f.seek(point)#每一次运行时把文件指针指向新的日志
            ips  = {}
            for line in f:
                ip = line.split()[0] #取到ip地址
                if ip not in ips: #判断ip是否出现过,没有出现过ip的次数就是1
                    ips[ip] = 1
                else:#出现过的话,次数就在原来的基础上+1
                    ips[ip]+=1
            point = f.tell()#记录读完的位置
            for k,v in ips.items():
                if v>=20:
                    print('有问题的ip地址是%s'%k)
        time.sleep(60)#每分钟运行一次

    7、切片

     1 L = ['xiaomi',100,88,94]
     2 sum(L[1:])#内置函数,计算列表元素的和
     3 s = 'abc1234567'
     4 #切片顾头不顾尾
     5 print(s[0:3])
     6 print(s[:3])#前面数字不写代表从头开始取
     7 print(s[1:])#后面数字不写代表取到末尾
     8 print(L[:])#前后数字都不写,取全部的元素
     9 L[1:2] = [] #删除切片
    10 del L[1:3]#删除切片
    11 L[1:4] = [4,5,6] #修改切片
    12 
    13 nums = list(range(1,21))#取1到20的数组
    14 print(nums[0:10:2])#第三个数字代表步长,隔2个数字取一个
    15 print(nums[::-2])#步长为负数,取数时从右往左取

    8、集合

     1 #集合可以去掉重复元素,集合是无序的
     2 
     3 L = [1,1,2,3,4,4,5]
     4 res = set(L)#把L转成一个集合
     5 print(res)
     6 
     7 res = list(res)#把集合转成list
     8 print("res: ",res) 
     9 
    10 #交集,a、b里面都有的
    11 s1 = {1,2,3,4}
    12 s2 = {4,5,6,7}
    13 print(s1.intersection(s2))#取交集
    14 print(s1&s2)#取交集
    15 stu1 = ['xxx','ccc','fff']
    16 stu2 = ['xxx','ccc','rrr','iii']
    17 print(set(stu1) & set(stu2))#转成集合,然后取交集
    18 
    19 #并集,合并a,b
    20 print(s1.union(s2))
    21 print(s1 | s2)
    22 
    23 #差集,a里面有,b里面没有
    24 print(s1.difference(s2))
    25 print(s1 - s2)
    26 
    27 #对称差集,把a和b里面都有的去掉
    28 print(s1.symmetric_difference(s2))
    29 print(s1^s2)

    9、集合实例--验证密码包含大小写字母、数字、特殊字符

     1 import string
     2 password = input("请输入密码: ").strip()
     3 p_set = set(password)   #取到密码的集合
     4 print('大写字母取交集',p_set.intersection(set(string.ascii_uppercase)))   #将密码的集合与大写字母集合取交集
     5 print('小写字母取交集',p_set.intersection(set(string.ascii_lowercase)))
     6 print('数字取交集',p_set.intersection(set(string.digits)))
     7 print('特殊字符取交集',p_set.intersection(set(string.punctuation)))
    #判断密码与大写、小写、数字、特殊字符的集合是否全部不为空
    8 if p_set.intersection(set(string.ascii_uppercase)) 9 and p_set.intersection(set(string.ascii_lowercase)) 10 and p_set.intersection(set(string.digits)) and p_set.intersection(set(string.punctuation)): 11 print("密码合法") 12 else: 13 print("密码包含大写小写特殊字符")

    10、json模块

     1 #存在文件里面的东西读出来都是字符串
     2 #json是一个字符串
     3 # 1、json.dumps()把字典转成字符串
     4 # 2、json.dump()把字典直接以json字符串存入文件
     5 # 3、json.loads()传一个字符串,把json字符串转成字典
     6 # 4、json.load(f)#传一个文件,把文件读出来转成字典
     7 
     8 import json
     9 
    10 #json.loads() 传一个字符串,把json字符串转成字典
    11 #1、打开文件
    12 #2、读取文件内容
    13 #3、json.loads把读到字符串转成字典
    14 f = open('user4.txt',encoding='utf-8')
    15 res = f.read()
    16 # print('res的类型',res,type(res))
    17 d = json.loads(res) #把json串转成字典
    18 print('d: ',d)
    19 
    20 #使用json.load把字符串转成字典
    21 #1、打开文件
    22 #2、load
    23 f = open('user6.txt',encoding='utf-8')
    24 result = json.load(f)#传一个文件,把文件读出来转成字典
    25 print(result)
    26 
    27 # json.dumps() 把字典转成字符串
    28 #1、打开文件
    29 #2、把字典dumps转成字符串
    30 #3、把字符串写到文件里面
    31 d = {"xiaomi":'123456',"xxx":'中文'}
    32 #json.dumps()把字典转成json串,indent参数代表缩进,ensure_ascii=False有中文时不要显示成unicode
    33 res = json.dumps(d,indent=4,ensure_ascii=False)#字典转换成字符串
    34 print(type(res))#res类型是str
    35 f = open('user6.txt','w',encoding='utf-8')
    36 f.write(res)
    37 
    38 # json.dump() 把字典直接以json格式存入文件
    39 #1、打开文件
    40 #2、json.dump 写入
    41 d= {
    42         "error_code": 0,
    43         "stu_info": [
    44                 {
    45                         "id": 8485,
    46                         "name": "矿泉水2",
    47                         "sex": "未知",
    48                         "age": 38,
    49                         "addr": "天通苑",
    50                         "grade": "双子座",
    51                         "phone": "12123685603",
    52                         "gold": 100
    53                 }
    54         ]
    55 }
    56 fw = open('kqs.json','w',encoding='utf-8')
    57 json.dump(d,fw,indent=4,ensure_ascii=False)#用dump直接把字典存进文件
  • 相关阅读:
    蜗牛爱课 -- iOS 设计模式之模板模式
    蜗牛爱课- iOS中plist的创建,数据写入与读取
    蜗牛爱课 - iOS7、8模态半透明弹出框
    UIScrollView的属性总结
    简述UITextField的属性和用法
    IOS开发 统计XCODE 代码行数
    当xcode里点运行出现treating unicode character as whites
    Your build settings specify a provisioning profile with the UUID, no such provisioning profile was found的解决方案
    CocoaPods安装和使用教程
    蜗牛爱课- CGAffineTransformMakeRotation 实现一张图片的自动旋转
  • 原文地址:https://www.cnblogs.com/yanyan-/p/10704671.html
Copyright © 2020-2023  润新知