zoukankan      html  css  js  c++  java
  • 学习python的day11之文件操作

    1.文件操作

    文件操作的作用就是把一些内容(数据)储存起来,可以让程序下一次执行的时候直接使用,而不必重新制作一份,省时省力。

    2.文件操作步骤

    2.1)打开文件

    2.2)读写等操作

    2.3)关闭文件

    注:可以只打开文件、关闭文件,不进行任何读写操作。

    2.1打开文件

    在python中 ,使用open函数,可以打开一个已存在的文件,或创建一个新文件,语法如下:

    open(name,mode)

    name:是要打开的目标文件名的字符串(可以包含文件所在的具体路径)

    mode:设置打开文件的模式(访问模式):只读、写入、追加等

    打开或创建一个文件

    f = open('text.txt','w')
    f.close()

    f是文件对象

    2.2访问模式

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

    mode 'r' :  只读,如果文件不存在,报错;不支持写入操作。

    mode 'w' : 只写,如果文件不存在,新建文件;如果文件存在,原有的内容会被覆盖 

    mode 'a' : 追加,如果文件不存在,新建文件;如果文件存,在原有内容后面追加内容

    如果文件不存在,省略访问模式会报错。

    如果文件存在,省略访问模式则默认访问模式为 'r'  .

    2.3访问模式

    read()

    语法:文件对象.read(num)

    num表示从文件中读取的数据的长度(单位是字节),如果没有传入num,那么就表示读取文件中所有的数据。

    例:texts.txt的文件内容为

    aaaaa

    bbbbb

    f = open('texts.txt')
    result = f.read()
    print(result)
    f.close()
    '''
    输出:
    aaaaa
    bbbbb
    '''
    f = open('texts.txt')
    result = f.read(7)
    print(result)
    f.close()
    '''
    输出:
    aaaaa
    b
    '''

    没有输出7个字母是因为aaaaa后面有一个换行符,占一个字节

    readlines():

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

    f = open('texts.txt')
    result = f.readlines()
    print(result)
    f.close()
    '''
    输出:
    ['aaaaa
    ', 'bbbbb']
    '''

    readline()

    readline:一次只能读取一行内容

    f = open('texts.txt')
    result = f.readline()
    print(f'第一次:{result}')
    result = f.readline()
    print(f'第二次:{result}')
    f.close()
    '''
    输出:
    第一次:aaaaa
    
    第二次:bbbbb
    '''

    第几次调用就读取第几行

    访问模式的特点:

    r+  w+  a+ 的区别以及文件指针位置对读取的影响

    r+ :r没有文件则报错,文件指针再开头,所以能读取出来数据,如果执行写入操作,会从文件开头用新内容覆盖原内容

    w+ : 没有文件会新建文件;w+特点:文件指针在开头,不论是执行读取操作还是写入操作,新内容都会覆盖所有原内容

    a+ : 没有文件会新建文件,文件指针在结尾,无法读取数据(指针后面没有数据)

    seek()

    作用:用来移动文件指针位置

    语法:文件对象.seek(偏移量,起始位置)

    起始位置:

    0 :文件开头

    1 :当前位置

    2 :文件结尾

    r+ :可以改变文件指针位置,如果执行读写操作,会以新内容覆盖原内容(新内容有多少字符覆盖多少字符)

    f = open('texts.txt','r+')
    f.seek(2,0)
    result = f.read()
    print(result)
    f.close()
    '''
    输出:
    aaaaa
    bbbbb
    ccccc
    '''
    
    f = open('texts.txt','r+')
    f.seek(1,0)
    f.write('FFF')
    f.seek(0,0)
    result = f.read()
    print(result)
    f.close()
    '''
    输出:
    aFFFa
    bbbbb
    ccccc
    '''

    a+ :可以改变文件指针位置,达到读取文件的目的;如果执行写入操作,仍然是在文件结尾追加,同时指针会回到文件结尾

    f = open('texts.txt','a+')
    f.seek(0,0)
    result = f.read()
    print(result)
    f.close()
    '''
    输出:
    aaaaa
    bbbbb
    ccccc
    '''
    
    f = open('texts.txt','a+')
    f.seek(0,0)
    f.write('FFF')
    f.seek(0,0)
    result = f.read()
    print(result)
    f.close()
    '''
    输出:
    aaaaa
    bbbbb
    cccccFFF
    '''

    2.4文件备份

    文件备份代码实现

    1.接收用户输入的文件名

    old_name = input('请输入要备份的文件名:')

    2.查找要备份的文件名的后缀 '.' 的下标位置

    index = old_name.rfind('.')

    3.判断用户输入的文件名是否有效

    if index > 0:
        postfix = old_name[index:]

    4.生成备份文件的文件名

    new_name = old_name[:index] + '[备份]' + postfix

    5.打开要备份的文件以及备份文件

    old_f = open(old_name,'rb')
    new_f = open(new_name,'wb')

    6.开始备份文件()即在备份文件写入数据

    如果不确定目标文件大小,循环读取输入,当读取出来的数据没有了终止循环

    while True:
        result = old_f.read()
        if len(result) == 0:
            break
        new_f.write(result)

    7.备份完成,关闭文件

    old_f.close()
    new_f.close()

    二、文件和文件夹操作

    在python模块中文件和文件夹的操作要借助os模块里的相关功能,具体步骤如下:

    1.导入模块

    import os

    2.使用os模块相关功能

    os.函数名()

    3.重命名 (既可以对文件重命名,也可以对文件夹重命名)

    os.rename(目标文件名,新文件名)/os.rename(目标文件夹名,新文件夹名)

    4.删除文件/文件夹

    os.remove(目标文件名)/os.remove(目标文件夹)

    5..创建文件夹

    os.mkdir(文件夹名字)

    6.删除文件夹

    os.rmdir(文件夹名字)

    7.获取当前文件夹目录(返回当前文件所在目录路径)

    os.getcwd()

    8.改变默认目录(改变目录路径)

    os.chdir(目录)

    需求:在目录aa下创建bb文件夹

    步骤:先改变目录路径为文件夹aa,再创建文件夹bb

    import os
    os.chdir('aa')
    os.mkdir('bb')

    9.获取目录列表(获取某个文件夹下的所有文件,返回一个列表)

    os.listdir(目录)

    三   应用案例

    需求 : 批量修改文件名,既可添加指定字符串,也可以删除指定字符串

    代码实现

    #导入os模块
    import os
    #构造条件数据
    flag = 2
    #获取当前文件夹下的所有文件
    new_listdir = os.listdir()
    #开始批量构造名字
    for i in new_listdir:
        #以添加的方式修改
        if flag == 1:
            new_name = 'python_' + i
            os.rename(i,new_name)
        #以删除的方式修改
        elif flag == 2:
            num = len('python_')
            os.rename(i,i[num:])

    四  文件总结

    1.文件操作步骤

     1.1打开

      文件对象 = open(目标文件,访问模式)

     1.2操作

      1.2.1 读

        文件对象.read()

        文件对象readline()

        文件对象readlines()

      1.2.2 写

        文件对象.write()

      1.2.3 seek()

        移动文件指针位置

     1.3 关闭

      文件对象.close()

    2.主访问模式

      w :写,文件不存在则新建文件

      r  :读,文件不存在则报错

      a :追加,文件不存在则新建文件

    3.文件和文件夹操作

      重命名:os.rename()

      获取当前目录:os.getcwd()

      获取目录列表:os.listdir()

  • 相关阅读:
    如何得到需要下载文件的链接(路径)?
    Python之内存泄漏和内存溢出
    IO多路复用
    python-socket和进程线程协程(代码展示)
    Xshell(远程)连接不上linux服务器(防火墙介绍)
    Shell--变量
    Python读写配置文件模块--Configobj
    python文件处理之fileinput
    python之commands和subprocess入门介绍(可执行shell命令的模块)
    linux下 > /dev/null 2 > &1 的意思和如何在后台启动进程
  • 原文地址:https://www.cnblogs.com/scheduled/p/13843909.html
Copyright © 2011-2022 走看看