• day9 文件的读取


    文件操作

    一、打开文件

     f = open('歌词.txt','w',encoding='utf-8') # f:文件操作符 文件句柄 文件操作对象
     open打开文件是依赖了操作系统提供的途径
     操作系统有自己的编码,open在打开文件的时候默认使用操作系统的编码
     win默认编码gbk mac/linux默认utf-8
     习惯叫f file f_obj f_handler fh
     操作:读 写

    复制代码
    f = open('歌词.txt','w',encoding='utf-8')
    print(f.writable())  # True writable判断文件是否可写
    print(f.readable())  # False readable判断文件是否可读
    f.write('7000')  # 写文件的时候需要写数字,需要把数字转换成字符串
    f.write('wodexintailuan')
    f.write('yaoyidiankongbai
    ')
    f.write('laotianzaibuzai')
    f.write('
    laotianzaibuzai')  # 文件的换行
    f.write('志强')
    f.close()  # 关闭文件
    复制代码

    二、找到文件详解

    找到文件详解:文件与python的执行文件在相同路径下,直接用文件的名字就可以打开文件
    文件与python的执行文件不在相同路径下,用绝对路径找到文件
    文件的路径,需要用取消转译的方式来表示:1.\2.r''
    如果以写文件的方式打开一个文件,那么不存在的文件会被创建,存在的文件之前的内容会被清空
    f = open(r'C:UsersAdministratorDesktops8.txt','w',encoding = 'utf-8')  # r取消后面字符串所有的特殊功能
    f.write('哈哈哈')
    f.close()

    三、关闭文件详解

    操作系统级别的关闭文件资源:f.close() 必须写
    del f 主动释放了python程序内存中的变量 可写可不写

    四、读模式

    复制代码
    # f = open('歌词.txt','r',encoding = 'utf-8')
    f = open('歌词.txt',encoding = 'utf-8')  # 默认为r模式
    # 读文件的第一种方式:read方法,用read方法会一次性的读出文件中的所有内容
    print(f.read())
    # 读一部分内容:read(n),指定读n个单位
    print(f.read(5))
    # 读文件的第三种方式:按照行读,每次执行readline就会往下读一行
    content = f.readline()
    print(content.strip())  # strip去掉空格、制表符、换行符
    content2 = f.readline()
    print(content2.strip())
    # 读文件的第四种方式:readlines,返回一个列表,将文件中的每一行作为列表中的每一项返回一个列表
    content = f.readlines()
    print(content)
    # 读:最常用
    for line in f:
        print(line.strip())
    复制代码

    五、读文件并整理成需要的数据类型

    复制代码
     读文件并整理成需要的数据类型
     {'apple':[10,3]}
     f = open('shoplist',encoding='utf-8')
     goods_dict = {}
     for line in f:
         line = line.strip()
         goods_list = line.split()
         goods_dict[goods_list[0]] = goods_list[1:]
     print(goods_dict)
     f.close()
    
     f = open('shoplist',encoding='utf-8')
     goods_list = []
     for line in f:
         goods_dict = {}
         line = line.strip()
         goods_lst = line.split()
         goods_dict['name'] = goods_lst[0]
         goods_dict['price'] = goods_lst[1]
         goods_list.append(goods_dict)
     print(goods_list)
     f.close()
    
    # 只显示文件中有内容的行
     f = open('shoplist',encoding='utf-8')
     goods_dict = {}
     for line in f:
        if line.strip():
            print(line.strip())
     f.close()
    复制代码

    六、文件的打开模式

    复制代码
    f = open('歌词.txt','rb')
    content = f.read()
    print(content)
    f.close()
    # b:图片、音乐、视频等任何文件
    # 传输:上传、下载
    
    # a追加
    f = open('shoplist','a',encoding='utf-8')
    f.write('
    computer 6000 5')
    f.close()
    
    # r+ 可读可写
    # 先读后写:写是追写
    # 先写后读:从头开始写,并且会依次覆盖内容
    f = open('歌词.txt','r+',encoding='utf-8')
    line = f.readline()
    print(line)
    f.write('000000')
    f.close()
    # w+ 可写可读
    # 一上来文件就清空了,尽管可读 1.但是读出来的内容是你这次打开文件新写入的2.光标在最后,需要主动移动光标才可读
    f = open('歌词.txt','w+',encoding='utf-8')
    f.write('abc
    ')
    f.write('哈哈哈')
    f.seek(0)
    print(f.read())
    f.close()
    # a+ 追加可读
    f = open('歌词.txt','a+',encoding='utf-8')
    f.write('
    qq星')
    f.seek(0)
    print(f.read())
    f.close()
    
    # 一般情况下:文件操作要么读,要么写,很少会用到读写、写读同时用
    # 常用的:
    # r、w、a
    # rb、wb、ab,不需要指定编码了
    复制代码

    七、文件内的光标移动

    read(3)
    文件打开方式为文本模式时,代表读取3个字符
    文件打开方式为b模式时,代表读取3个字节

    复制代码
    f = open('歌词.txt','r+',encoding='utf-8')
    # seek光标移动到第几个字节的位置
    f.seek(0)  # 光标移动到开头
    f.seek(0,2)  # 光标移动到最后
    f.seek(0,1)  # 以当前位置为基准移动
    tell告诉我光标在第几个字节
    truncate 从文件开始的位置只保留指定字节的内容
    f.truncate(3)
    复制代码

     八、文件的修改

    复制代码
    # 1.创建一个新的文件
    f2 = open('原文件.bak','w',encoding='utf-8')
    # 2.把原来的文件中的内容读出来
    f = open('原文件',encoding='utf-8')
    old_content = f.read()  # 原来的内容
    # 3.操作读出来的字符串,把字符串中的内容替换掉
    new_content = old_content.replace('原来','新')
    # 4.把替换之后的内容写到新文件里
    f2.write(new_content)
    f.close()
    f2.close()
    # 5.删除原文件,新文件重命名成源文件的名字
    import os  # os模块
    os.remove('原文件')  # 删除文件
    os.rename('原文件.bak','原文件')  # 重命名
    
    # 只替换第一个原来
    f2 = open('原文件.bak','w',encoding='utf-8')
    f = open('原文件',encoding='uft-8')
    count = 0
    for line in f:
        if '原来' in line and count == 0:
            new_line = line.replace('原来','新')
            f2.write(new_line)
            count = 1
        else:
            f2.write(line)
    f.close()
    f2.close()
    import os  # os模块
    os.remove('原文件')  # 删除文件
    os.rename('原文件.bak','原文件')  # 重命名
    复制代码

    九、with操作文件,不用关闭文件

    复制代码
    with open('源文件',encoding='utf-8') as f:
        content = f.read()
        print(content)
    
    with open('源文件',encoding='utf-8') as f,open('源文件.bak','w',encoding='utf-8') as f2:
        for line in f:
            new_line = line.replace('原来','新')
            f2.write(new_line)
  • 相关阅读:
    渣渣菜鸡的蚂蚁金服面试经历(一)
    20 个案例教你在 Java 8 中如何处理日期和时间?
    Spring Boot 2.0系列文章(七):SpringApplication 深入探索
    分布式锁看这篇就够了
    Spring Boot 2.0系列文章(五):Spring Boot 2.0 项目源码结构预览
    20135337朱荟潼——实验三
    20135337朱荟潼Java实验报告二
    5337朱荟潼Java实验报告一
    Linux内核设计笔记12——内存管理
    Linux内核设计笔记11——定时器
  • 原文地址:https://www.cnblogs.com/QQ279366/p/7755273.html
Copyright © 2020-2023  润新知