• Python学习(五) —— 文件操作


    一、文件操作

      1、文件操作:数据持久化的一种

           步骤:找到文件,打开文件,操作:读、写、追写,关闭文件

           打开文件:f = open(文件路径,操作模式,编码方式),f:文件句柄、文件操作符、文件操作对象,f 习惯叫 file、f_obj、f_handler、fh,操作模式默认为读

                  open打开文件是依赖了操作系统提供的途径,操作系统有自己的编码,open在打开的时候默认使用操作系统的编码方式

           文件路径:文件和py的执行文件在相同路径下,直接用文件的名字就可以打开文件

                文件和py的执行文件不在相同路径下,用绝对路径打开文件文件的绝对路径,需要以取消转义的方式来表示:1.\  2.r''

           如果以写的方式打开一个文件,那么不存在的文件会被创建,存在的文件内容会被清空

           关闭文件:f.close(),必须写,del f 主动释放内存中的一个变量,可写可不写

    f = open('练习','w',encoding='utf-8')  #w:打开并清空文件
    print(f.readable()) #判断文件是否可读
    print(f.writable()) #判断文件是否可写
    f.write('12345') #写文件的时候需要写数字,需要把数字转换成字符串
    f.write('学而时习之')
    f.close()
    #关闭文件
    f = open(r'C:UsersAdministratorDesktopcase.txt',,encoding='utf-8')  #绝对路径,模式为只读
    print(f.readline().strip()) #按行读,只读一行,strip清除换行符
    print(f.readlines()) #把每行的内容变成字符串存在一个列表里

      2、文件的读:read,'r'

         读文件的方式:第一种:read,一次性读出文件的所有内容,占用内存大

                第二种:read(n),指定读n个字符

                第三种:按照行读,readline(),每次执行readline就会往下读一行,strip去掉空格、制表符、换行符

                第四种:readlines,返回一个列表,将文件中的每一行作为列表中的每一项返回一个列表

                第五种:最常用,for循环,for l in f:print(l.strip())

    f = open('练习',encoding='utf-8')
    print(f.read())
    print(f.read(5))
    print(f.readline().strip())
    print(f.readlines())
    f.close()
    
    f = open('练习',encoding='utf-8')
    for l in f:
        print(l.strip())
    f.close()

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

    f = open('case',encoding='utf-8')
    lis = []
    for line in f:  
        if line.strip():  #判断是否为空行
            dic = {}
            line = line.strip()
            li = line.split()
            dic['name'] = li[0]
            dic['price'] = int(li[1])
            lis.append(dic)
    print(lis)
    f.close()

      4、文件的打开模式

    Character Meaning
    ‘r' open for reading (default)
    ‘w' open for writing, truncating the file first
    ‘a' open for writing, appending to the end of the file if it exists
    ‘b' binary mode
    ‘t' text mode (default)
    ‘+' open a disk file for updating (reading and writing)
    ‘U' universal newline mode (for backwards compatibility; should not be used in new code)

            打开文件的模式有:1、(默认为文本模式):r,只读模式【默认模式,文件必须存在,不存在则抛出异常】

                                                                              w,只写模式【不可读;不存在则创建;存在则清空内容】

                                  a,追加写模式【不可读;不存在则创建;存在则只追加内容】

                 2、对于非文本文件,我们只能使用b模式,"b"表示以字节的方式操作,注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码

                 3、"+" 表示可以同时读写某个文件

    # r+  可读可写:
        #1.先读后写:写是追写
        #2.先写后读:从头开始写
    
    # w+  可写可读:一上来文件就清空了
        # 尽管可读:1.但是你读出来的内容是你这次打开文件新写入的
                      # 2.光标在最后,需要主动移动光标才可读  
    
    # a+  追加可读
    
    #一般情况下:文件操作,要么读,要么写,很少会用到读写、写读同时用的
    #常用的:
    #r、w、a,需要指定编码
    #rb、wb、ab,不需要指定编码了      

      5、文件内的光标移动

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

                文件打开方式为b模式时,代表读取3个字节

        其余的文件内光标移动都是以字节为单位如seek,tell,truncate

    #seek()  光标移动到第几个字节的位置
        # f.seek(0)    移动到最开始
        # f.seek(0,2)  移动到最末尾
    #tell() 告诉当前光标在第几个字节
    #truncate() 从文件开始的位置只保留指定字节的内容

      6、文件的修改:打开旧文件, 把旧文件的内容读出来,创建一个新文件,把旧文件读出来的内容修改后写入新文件,把旧文件删除,再把新文件重命名成旧文件的名字

    #第一种方法:
    f1 = open('old_file',encoding='utf-8') f2 = open('new_file','w',encoding='utf-8') for line in f1: line = line.replace('old','new') f2.write(line) f1.close() f2.close() import os os.remove('old_file') os.rename('new_file','old_file')
    #第二种方法:
    with open('old_file',encoding='utf-8') as f1,open('new_file','w',encoding='utf-8') as f2: #用with打开文件不用close for line in f1: line = line.replace('old','new') f2.write(line) import os os.remove('old_file') #删除old_file os.rename('new_file','old_file') #new_file重命名

      7、文件的删除

    import os  #导入os模块
    os.remove('file')  #删除文件
  • 相关阅读:
    笔记64 Spring Boot快速入门(四)
    笔记63 Spring Boot快速入门(三)
    笔记62 Spring Boot快速入门(二)
    笔记61 Spring Boot快速入门(一)
    笔记60 Spring+Mybatis整合
    笔记59 Spring+Hibernate整合(二)
    【转】单点登录原理与实现
    【转】大型网站架构演变和知识体系
    Eclipse下绿色安装插件Aptana、Swing
    zeromq源码分析笔记之准备(0)
  • 原文地址:https://www.cnblogs.com/Coufusion/p/7754914.html
Copyright © 2020-2023  润新知