zoukankan      html  css  js  c++  java
  • 文件读写,函数,元组和集合

    1、文件读写

         f = open('day4','r+',encoding = 'utf-8')
        #读模式    r   打开不存在的文件会报错、只能读、不能写
    #写模式 w #1、打开不存在的文件,会新建一个文件,会清空原有文件
    #2、不能读、只能写
    #追加模式 a #1、打开不存在的文件,会新建
    #2、不能读、只能写
    #读写模式 r+ 1、能读也能写
    2、打开不存在文件的时候会报错
    #写读模式 w+
    1、能读
    2、读不到内容,因为w先把文件内容清空
    #追加读模式 a+
    1、能读
    2、能不能读到内容,读不到内容,因为上来指针就在最后,必须要有seek才能读到内容
    f.seek(0)

    1)文件直接循环

         你直接循环文件对象,每次取的就是文件里面的每一行
    for line in f:
    print(line)
      2)移动指针:

    f.seek(0) # 移动文件指针到最前面
    f.flush() # 刷新缓冲区,立即写到磁盘上。
    # 计算机处理时,磁盘上的东西先读取到内存上,CPU再去读内存。读后再传入内存,再存到磁盘。
    # 而定义变量是存在内存里。
    # 内存和磁盘交换频繁会影响性能,所以有缓冲区,满了再写到磁盘里。

    3)读取行:

    print(f.readline())
    读取一行的内容,
    print(f.readlines())
    读取所有内容,取每行元素组成的list
    print(f.read())
    读取所有内容
    这三个会彼此影响,因为依次读,文件指针(写字符,光标)会移动。

    4)删除更改文件名字:
    import os
    os.remove('stu.txt')#把user文件删掉
    os.rename('.stu.txt','stu.txt') #更改文件名

    5)记录指针位置:
    f = open('access.log',encoding='utf-8')
    point = f.tell() #记录指针的位置
    f.seek(point) #指针回到记录的位置

    2、集合、元组

       1)集合: 用set,{}
    s = set()
    集合是无序的,自动去重的
    # 集合天生可以去重
    l = [1,2,2,5,5,3,5]
    lset = set(l)
    print(lset)
    stus1 = {'胡绍燕','王义','王新','马春波','高文平'}
    stus2 = {'胡绍燕','张芳芳','王新','马春波','高文平'}

    #取交集(2种方法)
    print(stus1.intersection(stus2))
    print(stus1&stus2)

    #取并集
    print(stus1.union(stus2))
    #print(stus1|stus2)

    #差集
    print(stus1-stus2)
    print(stus1.difference(stus2))

    #对称差集 只在一个集合里面出现过的
    print(stus1.symmetric_difference(stus2))
    print(stus1^stus2)

    #增加元素
    stus1.add('孙悟空')

    #删除
    stus1.pop()#随机删除一个
    #stus1.remove('王新')

    # 直接循环集合:取每一个元素
    for s in stus1:
    print(s)

    2)元组: 用()
    元组也是一个list,但是它的值不能改变
    # s = [1,2,3]
    # t = (1,2,3) #元组。优先级高。
    # m = (123)# 如果只一个元素,判断不出是否是元组。
    # 如果一个元素的元组,元素后边要加,
    # t[1]=4 #会报错。元组也无序,不可以修改
    # print(t)

    #print((4+5)*4)


    3)俩个模块:


    import string
    print(string.ascii_lowercase)#取所有小写字母
    print(string.ascii_uppercase)#取所有大写字母
    print(string.digits)#取1-9自然数
    print(string.ascii_letters)#取所有小写字母和大写字母
    print(string.punctuation)#取特殊符号

    import random
    print(random.randint(1,23))#取1-23间的一个随机整数
    s = [1,2,3,4]
    print(random.choice(s))#随机选择一个元素
    print(random.sample(s,3))#随机选择3个元素,放到list里
    print(random.shuffle(s))#只能传list,打乱s顺序。但打乱后没有返回list,而是None
    print(random.uniform(1,13))#取范围内一个小数,保留了很多位小数
    f = random.uniform(1,13)
    print(round(f,3))#取3位小数

    3、函数


    实现某个功能的一些代码。
    提高代码的复用性。
    函数必须被调用才会执行。

    函数里面定义的变量:局部变量,只要一出了函数都不能用了

    #定义一个函数
    def hello():#定义一个叫hello的函数
    print('hello')
    #函数必须被调用才会执行

    #调用函数
    hello()#函数名后边加括号,才调用了函数

    #定义函数
    def write_file(file_name,content):#入参。定义个函数,有俩个变量名.其中file_name和content叫形参,是俩个形式参数
    print(file_name,content)
    with open(file_name,'a+',encoding='utf-8') as f:
    f.write(content)

    #调用函数:
    # write_file('b.txt','123')
    # write_file('a.txt','123')
    # write_file('c.txt','12d3')
    括号中的这个叫实参,实际参数

    def read_file(file_name):#下边缩进部分叫函数体
    with open(file_name,'a+',encoding='utf-8') as f:
    f.seek(0)#a+,要注意指针位置
    content = f.read()
    return content#不写的话会返回None

    #函数里面定义的变量,都是局部变量。只要一出了函数,就不能用了。
    #需要思考怎样、需要不需要入参,怎样写return
    #个人思考:入参是条件,return是目标
    print(read_file('stu.txt'))#调用函数

    return和print的区别:
    return能返回一个值,而且能在调用的时候定义一个变量来接收。
    print只是打印,只能看。

    4.判断

    非空即真,非0即真(不是真就是假,空就是假)(能省很多代码
    True
    False  ''  None  []  {}

    username = input('username:').strip()
    if username:#if是真了才走,空是假的,所以空的时候不走。
    print('username不为空')
    else:
    print('username为空')
    if 1:#1是true
    print('true')
    else:
    print('false')

    if 0:#0是false
    print('true')
    else:
    print('false')

    5.高效处理文件方法:

    #将文件的行做成一个字典
    f = open('user')#文件对象,或者文件句柄。
    d = {}
    while 1: #第一种,但要求文件里不能有空行
    line = f.readline()#一行一行读,效率高
    if line:#直接循环,取代read
    user,passwd = line.split(',')
    d[user]=passwd
    else:#见空停止
    break
    print(d)

    #取文件行内容
    2.直接循环
    for line in f:#直接循环文件对象,取的就是每一行
    print('每次循环的是',line)

    #增加行
    f = open('user','a+')
    #f.write()
    l = ['abc123 ','bcd123 ']
    s = 'adfsdfasf '
    f.writelines(l)#高效方法,依循环依次将定义的list每一个元素写进去
    如果是字符串儿的话,还是用write吧

    更改文件:第一种
    with open('user','a+') as f:#会自动判断,关闭文件
    f.seek(0)
    result = f.read()
    new_result = result.replace('jjj','ABC')#替换了,但并不能更改到文件中
    f.seek(0)
    f.truncate()#清空文件内容
    f.write(new_result)

    #更改文件:第二种
    import os
    with open('user')as fr,open('.users','w')as fw:
    for line in fr:#从需要修改的文件里面读
    new_line = line.replace('abc','ABC')#需要更改的更改,不需要的不做更改,直接定义
    fw.write(new_line)

    os.remove('user')#把user文件删掉
    os.rename('.users','user')#把users改名儿为user


  • 相关阅读:
    Shell编程进阶 2.2 shell数组
    Shell编程进阶 2.1 shell函数
    win7将 esc与 capslock 互换
    Vimium 快捷键记录
    mysql-server 的一些记录
    2003服务器断开rdp后会自动注销。
    CentOS云服务器数据盘分区和格式化
    autoproxy 规则
    理解MySQL——索引与优化
    Spinnaker简介
  • 原文地址:https://www.cnblogs.com/fangfangzhang/p/10051080.html
Copyright © 2011-2022 走看看