zoukankan      html  css  js  c++  java
  • python 3 基础之文件操作

    文件操作

    文件的读写操作需要借用函数 open() 完成

      使用格式:open(文件名,访问模式)

      下面是访问模式对照表

    访问模式 说明
    r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式
    w

    打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件

    a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
    rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。
    wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
    ab 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
    r+ 打开一个文件用于读写。文件指针将会放在文件的开头。
    w+   打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
    a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
    rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
    wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
    ab+ 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

    文件的操作流程:

      打开文件(创建文件)——>文件读写——>关闭文件

      文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限的;

      用什么方式打开的文件就只能干什么,如:不能用写的方式打开文件去读取文件

    1、文件的读取

      打开一个文件filename.txt,用只读模式打开

    # 以只读模式 打开文件filename
    f = open('filename.txt','r')
    print(f.read())
    f.close()

    2、文件的写入(也可以用于创建一个新文件)

      打开一个新的文件并写入内容(多行内容写入可以用三引号保持文本格式) 

    # 以写入模式写入内容
    f = open('lianxi.txt','w')
    f.write('''tar -xvf filename
    select * from students
    select * from students order by ageselect * from students order by age limit 1
    create function liaotian ()''')
    f.close()

      创建一个新的文件

    # 创建一个空的文件xinfile.txt
    f = open('xinfile.txt','w')
    f.close()

      在文件末尾追加字符串

    f = open('lianxi.txt', "a")
    f.write("nihao")
    f.close()

    3、文件常用的方法

      3.1、readlines()

        readlines可以按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素

    f = open('lianxi.txt','r')
    print(f.readlines())
    f.close()
    
    ===============================
    运行结果:['tar -xvf filename
    ', 'select * from students
    ', 'select * from students order by ageselect * from students order by age limit 1
    ', 

    'create function liaotian ()']

      3.2、readline()

        读取打开文件的第一行

      3.3、write()

        用于文件的写入,请看第 2 段内容

      3.4、tell()

        返回文件的当前位置,即文件指针当前位置;在读写文件的过程中,如果想知道当前的位置,可以使用tell()来获取

    f=open('/tmp/passwd',mode='r')  #以只读模式打开/tmp目录下的passwd文件
    print(f.tell())                 #输出0
    content=f.read()
    print(content)
    print(f.tell())                 #输出2287,即文件的末尾
    f.close()                       #文件操作之后,必须关闭文件

      3.5、seek() 

        如果在读写文件的过程中,需要从另外一个位置进行操作的话,可以使用seek()。
        seek(offset,from)有2个参数
        offset:偏移量
        from:方向
        其中偏移量小于0,表示左移(比如-1表示左移1位);偏移量为0,表示不动;偏移量大于0,表示右移(比如1表示右移1位);其中from表示方向(0表示文件开头;1表示当前位置;2表示文件末尾)
        此方法参考:https://blog.csdn.net/qq_42303254/article/details/86608779

    f=open('/tmp/passwd',mode='r') #以只读模式打开/tmp目录下的passwd文件
    print(f.tell())                #输出0
    content=f.read()
    print(content)
    print(f.tell())                #输出2287,即文件的末尾
    f.seek(1,0)                    #表示将指针移到文件的开头,再向右移一个字节(即移到字节为1的位置
    print(f.tell())                #输出1
    print(f.read())                #输出第一个字节后面所有的文件内容
    f.close()                      #文件操作之后,必须关闭文件

      3.6、read()

        read() 默认用于读取整个文件的内容,read(3) 若输入参数,则为读取的字符个数

    f = open('lianxi.txt','r')
    # 读取整个文件内容
    print(f.read())
    # 读取10个字符
    # print(f.read(10))
    f.close()

    4、文件读写中文(编码)和中文解码

      写入数据(默认情况win系统(中国)保存中文,编码格式为gbk),(mac电脑或者是linux 没有问题)

      用write写入中文文件内容的时候,若未用encoding声明utf-8,读取数据时也不用,可以用read等方法读取成功,显示也没问题;但直接打开文件时显示的是乱码

      用write写入中文内容时,若用encoding声明utf-8,读取数据时也必须要用encoding声明,否则报错或者是读取的是乱码

    # 在文件后追加内容有中文,需要编码,用encoding=声明
    k = open('lianxi.txt','a',encoding='utf-8')
    k.write('
    中国广东省')
    k.close()
    # 文件读取时有中文,需要用encoding= 解码,否则会有乱码
    f = open('lianxi.txt', "r",encoding='utf-8')
    print(f.read())
    f.close()

     5、执行完with语句内容之后,自动关闭文件对象

      with语句打开文件时可以起个别名,单个文件别名后面用冒号,多个文件打开用逗号和反斜杠  ,  隔开;格式如下

      with open(文件名,模式) as 别名,

        open(文件名,模式) as 别名:

        操作内容

    '''
    案例:将/tmp/passwd文件中的内容复制到/tmp/passwdbackup文件中
    '''
    #同时打开两个文件对象
    with open('/tmp/passwd') as f1,
        open('/tmp/passwdbackup','w+') as f2:
        #将第一个文件的内容写入到第二个文件中
        f2.write(f1.read())
        #移动指针到文件最开始
        f2.seek(0,0)
        print(f2.read())

    6、制作 文件的备份

      文件备份的步骤:打开文件——>读取文件数据——>创建一个源文件的复制文件——>把文件读取复制到备份文件中

      示例代码:

    # 使用with语句
    with open('filename','r') as f,
        open('filename[复件]','w') as ff:
        ff.write(f.read())

    7、文件的相关操作

      对文件系统的访问大多通过 Python 的 os 模块实现. 该模块是 Python 访问操作系统功能的主要接口

      用人话说就是:想要对文件进行重命名、删除、创建文件夹等操作,需要先导入python的OS模块,接着用点方法进行操作

      7.1、文件的重命名 (在同级目录文件下运行)

        格式:os.rename('旧文件名' ,'新文件名')

    # 导入模块OS
    import os
    # 重命名
    os.rename('hm.txt','xuexi.txt')

      7.2、删除文件

        os模块中的remove()可以完成对文件的删除操作

        格式:os.remove('文件名')

    import os
    os.remove('hm.txt')

      7.3、创建文件夹

        格式:os.mkdir('文件夹名')

    import os
    os.mkdir('filename')

      7.4、获取当前目录

        格式:os.getcwd()

    import os
    print(os.getcwd())

      7.5、删除空文件夹

        格式:os.rmdir('空文件夹名称')

    import os
    os.rmdir('空文件夹名')

      7.6、获取目录列表

        格式:os.listdir()

    import os
    print(os.listdir())

      7.7、指定操作目录(在当前目录下,可以用此方法去非当前目录下操作文件)

        格式:os.chdir('目录')

    import os
    # 把操作的目录指定为 /mnt/soft
    os.chdir('/mnt/soft')
    ret = os.getcwd()
    print(ret)

    关于文件的其他一些操作,请看:https://blog.csdn.net/qq_42303254/article/details/86608779

    8、批量操作文件

      批量创建文件

    import os
    # 当前目录下创建一个文件夹
    os.mkdir('批量文件')
    # 指定默认目录
    os.chdir('批量文件')
    print(os.getcwd())
    # 在批量文件里创建10个文件
    for i in range(1,11):
        #打开文件
        f=open('piliangwenjian%s.txt' % i,'w')
        #关闭文件
        f.close()

      批量改名

    import os
    # 批量修改文件名
    # 1.先指定默认目录
    os.chdir('批量文件')
    # 2.获取当前目录下的目录列表(即‘批量文件’目录下的目录列表)
    my_list = os.listdir()
    print(my_list)
    # 3.遍历my_list
    for filename in my_list:
        newfilename = filename.replace('.txt','[中国].txt')
        os.rename(filename,newfilename)
    # 多次运行不会报错,只会继续把文件名继续修改

     9、文件操作常用的模式

      常用打开模式:

      r 只能读
      r+ 可读可写,不会创建不存在的文件,从顶部开始写,会覆盖之前此位置的内容
      w+ 可读可写,如果文件存在,则覆盖整个文件,不存在则创建
      w 只能写,覆盖整个文件,不存在则创建
      a 只能写,从文件底部添加内容 不存在则创建
      a+ 可读可写 从文件顶部读取内容 从文件底部添加内容 不存在则创建

      但是实验发现,这里的r+ 可读可写 不会创建不存在的文件 从顶部开始写 会覆盖之前此位置的内容不完整

      此节参考自:https://www.cnblogs.com/yangshl/p/6285942.html

  • 相关阅读:
    redis搭建集群
    redis搭建主从
    redis与python交互
    redis数据操作篇
    redis配置篇
    node 淘宝镜像
    java 深copy
    springmvc配置访问静态文件
    centos 启动 oracle
    List 分隔多次执行 且在同一个事物当中
  • 原文地址:https://www.cnblogs.com/will-wu/p/13252662.html
Copyright © 2011-2022 走看看