目录

Python基础语法(17)文件操作

Python基础语法(17)文件操作

学习目标

  • 文件操作的作用
  • 文件的基本操作
    • 打开
    • 读写
    • 关闭
    • 文件备份程序
  • 文件和文件夹的操作
  • 批量修改文件名案例

文件操作的作用

什么是文件?文档、视频、音乐……都叫文件,文件操作包含:打开、关闭、读、写、复制……,文件操作的作用是为了文件可以读取内容,写入内容或者备份内容……等。

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


文件的基本操作

文件操作步骤是:1.打开文件,2.读写操作,3.关闭文件,也可也只打开关闭不作读写操作。

打开

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

1
open(name, mode)

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

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

在使用前需要添加一个open函数的文件对象

模式 描述
r 以只读方式打开文件,文件的指针将会放在文件的开头,这里默认模式。
rb 以二进制格式打开一个文件用于只读,文件指针将会放在文件的开头,这是默认模式。
r+ 打开一个文件用于读写,文件指针将会放在文件的开头
rb+ 以二进制格式打开一个文件用于读写,文件指针将会放在文件的开头
w 打开一个文件只用于写入,如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件
wb 以二进制格式打开一个文件用于写入,如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除,如果该文件不存在,创建新文件
w+ 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除,如果该文件不存在,创建新文件
wb+ 以二进制格式打开一个文件用于读写,如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除,如果该文件不存在,创建新文件
a 打开一个文件用于追加,如果该文件已存在,文件指针将会放在文件的结尾,也就是说,新的内容将会被写入已有内容之后。如果该文件不存在,创建新文件进行写入。
ab 以二进制格式打开一个文件用于追加,如果该文件存在,文件指针将会放在文件结尾,也就是说新的内容会被写入已有内容之后。如果文件不存在,创建新文件进行写入。
a+ 打开一个文件用于读写,如果文件已存在,文件指针将会放在文件的结尾,文件打开时会是追加模式,如果文件不存在,创建新文件用于读写。
ab+ 以二进制格式打开一个文件用于追加,如果该文件已存在,文件指针会放在文件的结尾,如果该文件不存在,创建新文件用于读写。

⚠️注意:

  1. 如果文件不存在,r模式是报错的,w和a模式会新建文件;
  2. r模式下无法调用write函数,a和w模式可以调用write函数;
  3. w模式在写入时会覆盖掉原有内容,a模式写入时追加内容;
  4. 访问模式省略后默认为r模式。

实验:

1
2
3
f = open("1.txt",'w')   # 打开一个名为1.txt的文件,没有该文件则新建,访问模式为写,创建一个f对象
f.write('aaa')    # 写入aaa
f.close()       # 关闭文件释放内存

读写

读取文件内容的函数为read()readlines()readline()三种:

  • read( )
1
文件对象.read(num)

在r模式下调用,num表示要从文件中的读取的数据长度,单位是字节,如果没有传入num参数,那么表示读取文件的所有内容。

  • readlines( )

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

1
2
3
f = open('1.txt','r')
print(f.readlines())  # ['abcde\n', '123123\n', '123123']
f.close()
  • readline( )

readline可以一次读取一行内容。

1
2
3
4
5
f = open('1.txt','r')
print(f.readline())     # abcde'\n'
print(f.readline())     # 123123'\n'
print(f.readline())     # 123123'\n'
f.close()

写文件内容的函数为write()writelines()两种,这两种方式在访问模式在**除了r、rb两种访问模式之外的模式(可读写模式)**中使用。

  • write( )

write函数中会传入待写入文件的字符串,参数必须为字符串类型

1
2
3
f = open('1.txt','w')
f.write('123123') # w模式下覆盖原有内容,从指针开头写入123123
f.close()
  • writelines( )

writelines函数中会传入待写入文件的字符串或者是数据序列(所有元素均为字符串)

1
2
3
f = open('1.txt','w')
f.writelines(('1\n','1')) # w模式覆盖写入,从指针开头写入数据序列的字符串内容
f.close()

seek( )函数

用来移动文件指针,确定读取或写入的位置,语法如下:

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

对于起始位置参数的定义:0是文件的开头,1是当前的位置, 2是文件的结尾。

1
2
3
4
f = open('1.txt','r')
f.seek(2,0)     # 从文件开头偏移两个字符
print(f.read())
f.close()

关闭

调用close( )函数可以进行文件的关闭,断开当前链接。

文件备份程序

文件备份是将文件进行复制,在复制后的文件进行修改删除时不影响原文件的内容,保护了原文件,即保护了数据,为了防止原数据被篡改,文件备份是很重要的操作。

步骤

  1. 接受用户输入的文件名
  2. 规划备份文件名
  3. 备份文件写入数据

代码实现

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
def back():
    old_name = input("请输入需要备份的文件名:")
    index = old_name.rfind('.')
    if index < 1:
        return 0
    new_name = old_name[:index]+'[备份]'+old_name[index:]
    # 原文件读,备份文件写,循环写入
    old_f = open(old_name,'rb')
    new_f = open(new_name,'wb')
    while True:
        con = old_f.read(2048)
        new_f.write(con)
        if len(con) == 0:
            break
    old_f.close()
    new_f.close()
back()

文件和文件夹的操作

在Python文件的和文件夹的操作要借助os模块里的相关工能,具体步骤是先import导入os模块,然后调用函数。

  1. 文件:

    • rename(旧文件名, 新文件名)改名
    1
    2
    
    import os
    os.rename('1.txt','2.txt') # 第一个参数可以带路径
    
    • remove(目标文件名)删除
    1
    2
    
    import os
    os.remove('1.txt') # 参数可以带路径
    
  2. 文件夹

    • mkdir(创建文件夹的名字)
    1
    2
    
    import os
    os.mkdir('aa') # 参数可以带路径
    
    • rmdir(待删除文件夹的名字)
    1
    2
    
    import os
    os.rmdir('aa') # 参数可以带路径
    
    • getcwd( ) 获取路径以字符串形式返回
    1
    2
    
    import os
    print(os.getcwd())
    
    • chdir(目录)改变目录路径
    1
    2
    3
    4
    
    import os
    os.mkdir('aa')  # 创建aa文件夹
    os.chdir('./aa') # 进入aa文件夹
    os.mkdir('bb')  # 创建bb文件夹
    
    • listdir(目录) 列出路径下的所有文件以列表形式返回,参数可有可无
    1
    2
    
    import os
    print(os.listdir('..')) # 列出上一级目录的所有文件
    
    • rename(旧文件夹名, 新文件夹名)
    1
    2
    
    import os
    print(os.rename('a','new_a'))
    

应用案例

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

步骤

  1. 设置添加删除字符串的标识
  2. 获取指定目录的所有文件
  3. 将原有文件名添加/删除指定字符串,构造新名字
  4. 重命名

代码实现

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
import os
# 找到所有文件,获取文件夹下的目录列表
file_list = os.listdir()
print(file_list)
flag = 2
# 构造名字
for i in file_list:
    if flag == 1:
        new_name = 'Python_'+i
        os.rename(i, new_name)
    elif flag == 2:
        os.rename(i, i[len('Python_'):])

总结

  • 文件操作:

    • 打开open(目标文件,访问模式)

    • read(num)readlines()读取返回行列表、readline()读取行

    • write('str')writelines()写入数据序列或字符串

    • seek(偏移量, 初始位置)移动文件指针。

    • os.rename('原名称','现在名称')改文件名字

    • os.remove('目标')删除文件

  • 文件夹操作:

    • os.mkdir(创建文件夹的名字)创建文件夹
    • os.rmdir(待删除文件夹的名字)删除文件夹
    • os.getcwd( ) 获取路径以字符串形式返回
    • os.chdir(目录)改变目录路径
    • os.listdir(目录) 返回当前目录所有文件列表
    • os.rename(旧文件夹名, 新文件夹名)替换文件夹名称
  • 访问模式:

    • r模式以只读方式打开,指针位置在开头,文件不存在则报错,

    • rb模式以只读二进制方式打开,指针位置在开头,文件不存在则报错。

    • r+模式以读写方式打开,指针位置在开头,文件不存在则报错。

    • rb+模式以读写二进制方式打开,指针位置在开头,文件不存在则报错。

    • w模式以写方式打开,指针位置在开头,文件不存在则新建,原内容默认替换。

    • wb模式以二进制写方式打开,指针位置在开头,文件不存在则新建,原文件默认替换。

    • w+模式以读写方式打开,指针位置在开头,文件不存在则新建,原内容默认替换。

    • wb+模式以二进制读写方式打开,指针位置在开头,文件不存在则新建,原内容默认替换。

    • a模式以追加方式打开,指针位置在结尾,文件不存在则新建,原内容默认存在。

    • ab模式以二进制追加方式打开,指针位置在结尾,文件不存在则新建,原内容默认存在。

    • a+模式以读写方式打开,指针位置在结尾,文件不存在则新建,原内容默认存在。

    • ab+模式以二进制读写方式打开,指针位置在结尾,文件不存在则新建,原内容默认存在。