python学习day8 文件操作

发布时间:2019-03-19 21:15:47编辑:auto阅读(2050)

    老男孩python全栈day8

    文件操作

    编码方式:utf-8  gbk......

    操作方式:只读,只写,追加,读写,写读。。。  以什么编码方式打开文件,就以什么编码方式进行操作

    只读:

    r

    f = open('d:\模特主妇护士班主任.txt',mode='r',encoding='UTF-8')
    content = f.read()
    print(content,type(content))  #str
    f.close()
    

    rb    bytes类型 用于非文字的文件

    f = open('模特主妇护士班主任',mode='rb',)   #默认encoding方式
    content = f.read()
    print(content)
    f.close()  

    只写:

    w   如果没有此文件,创建;如果有此文件,覆盖原文件写入

    f = open('log',mode='w',encoding='utf-8')
    f.write('骑兵步兵')
    f.close() 

    wb

    f = open('log',mode='wb')  #打开默认bytes
    f.write('附近看到类似纠纷'.encode('utf-8'))  #写入必须加编码方式
    f.close()
    

     

    追加:

    a   在原文件光标出追加

    f = open('log',mode='a',encoding='utf-8')
    f.write('佳琪')
    f.close()
    

    ab

    f = open('log',mode='ab')
    f.write('佳琪'.encode('utf-8'))
    f.close()
    

      

    读写:

    r+  (最最常用)

    # 先读后写 
    f = open('log',mode='r+',encoding='utf-8')
    print(f.read())
    f.write('大猛,小孟')  #在原文件后面继续写入
    f.close()
    
    # 先写后读
    f = open('log',mode='r+',encoding='utf-8')
    f.write('大猛,小孟')  #原文件内容从第一个位置开始覆盖,覆盖的长度为写入的长度
    print(f.read())   #显示的是未覆盖的内容
    f.close()
    

      

    r+b

    f = open('log',mode='r+b')
    print(f.read())
    f.write('大猛,小孟'.encode('utf-8'))  #这里注意就好
    f.close()

    写读:

    w+

    f = open('log',mode='w+',encoding='utf-8')  #先创建文件
    f.write('aaa')
    f.seek(0)  ##必须加入此操作,不然读不出来,#调节光标 从某个字节处开始读
    print(f.read())
    f.close()
    

    w+b 不再赘述

    功能详解

    obj = open('log',mode='r+',encoding='utf-8')
    content = f.read(3)  # 读出来的都是字符 读三个字符
    f.seek(3)  # 按照字节设置光标的位置  光标在3个字节处  一个中文3个字节
    f.tell() 告诉你光标的位置
    print(f.tell())
    
    f.readable()  # 是否刻度
    line = f.readline()  # 一行一行的读
    line = f.readlines()  # 每一行当成列表中的一个元素,添加到list中
    f.truncate(4)   #截取前4个字符 覆盖文件 其实就是除了前4个字符,删除后面的
    for line in f:
        print(line)  #按行打印,会将回车\n也打印进去
    f.close()
    
    ## 一下的功能是读取指定位置的字符
    f = open('log',mode='a+',encoding='utf-8')
    f.write('佳琪')
    count = f.tell()  #光标的位置
    f.seek(count-9)   #将光标设为倒数三个字前(三个字节代表一个汉字)
    print(f.read(2))  #从光标处开始读两个字符 也就是读两个汉字
    f.close()
    ## with可以打开多个文件
    with open('log',mode='r+',encoding='utf-8') as f,\ 
        open('log',mode='w+',encoding='utf-8') as f1:
    

     

    open()默认读取方式是r,默认编码方式是跟操作系统相匹配,一般是gbk

     

    读的方式:

    read 一次性读 

    readlines 一次性读,按行切分

    readline 一行一行读,但是不知道在哪儿结束,视频 图片 rb bytes 按照字节读

    for循环 —— 最好了!!!  for line in f:

     

    光标 —— 文件指针
    seek -- 指定光标移动到某个位置
    tell -- 获取光标当前的位置
    truncate -- 截取文件

     

    实践:

    修改文件:读一个、写一个、删一个、重命名

    # 修改文件
    with open('小护士班主任',encoding='utf-8') as f,open('小护士班主任.bak','w',encoding='utf-8') as f2:
        for line in f:
            if '星儿' in line:  #班主任:星儿
                line = line.replace('星儿','啊娇')
            #写文件
            f2.write(line) #小护士:金老板
    
    import os  ###
    os.remove('小护士班主任') #删除文件
    os.rename('小护士班主任.bak','小护士班主任')  #重命名文件
    

      

    简单的注册、登陆

    username = input('请输入你要注册的用户名:')
    password = input('请输入你要注册的密码:')
    with open('list_of_info',mode='w',encoding='utf-8') as f:
        f.write('{}\n{}'.format(username,password))  ### 注意这里,以两行的形式写入文件
    print('恭喜您,注册成功')
    lis = []
    i = 0
    while i < 3:
        usn = input('请输入你的用户名:')
        pwd = input('请输入你的密码:')
        with open('list_of_info',mode='r+',encoding='utf-8') as f1:
            for line in f1:
                lis.append(line)
        if usn == lis[0].strip() and pwd == lis[1].strip():  ### 读出来的会有回车  strip()将其去掉
            print('登录成功')
            break
        else:print('账号和密码错误')
        i+=1
    

      

关键字