【Pyhton 基础知识】文件操作(打开、读写、关闭、备份)、os文件夹操作、批量修改文件名(添加指定字符串,删除指定字符串)

根据课程图文做的笔记,供自己复习查看

0. 文件操作的作用

把一些内容存储起来,让程序下一次使用时不必重新制作一份
下面有简单的例子:f是open函数的文件对象

# 1. 打开 open()
f = open('test.txt', 'w')

# 2. 读写操作 write() read()
f.write('aaa')

# 3. 关闭 close()
f.close()

1. 打开文件

open(name, mode): 使用open函数,可以打开一个已经存在的文件,或者创建一个新文件

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

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

2. 文件访问模式的选择

  • w和a访问模式,如果文件不存在,创建文件
  • r模式,文件不存在就报错
  1. 访问模式对文件的影响
  2. 访问模式对write()的影响
  3. 访问模式是否可以省略
模式 描述
r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式
rb 二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。
r+ 打开一个文件用于读写。文件指针将会放在文件的开头。
rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
w 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除,如果该文件不存在,创建新文件。
wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
w+ 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+ 打开一个文件用于读写。**如果该文件已存在,文件指针将会放在文件的结尾。**文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+ 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

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

f = open('test1.txt', 'r')
f = open('test.txt', 'r')
f.write('aa')
f.close()

# w:只写, 如果文件不存在,新建文件;执行写入,会覆盖原有内容
# f = open('1.txt', 'w')
# f.write('bbb')
# f.close()

# a:追加,如果文件不存在,新建文件;在原有内容基础上,追加新内容
# f = open('2.txt', 'a')
# f.write('xyz')
# f.close()

# 访问模式参数可以省略, 如果省略表示访问模式为r
f = open('1.txt')
f.close()
# a+:没有该文件会新建文件;文件指针在结尾,无法读取数据(文件指针后面没有数据)
f = open('test.txt', 'a+')

con = f.read()
print(con)

f.close()

在这里插入图片描述

3.读取函数和seek函数

函数 描述
read(num) num表示要从文件中读取的数据的长度(单位是字节),如果没有传入num,那么就表示读取文件中所有的数据
realines() 按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素
readline() 一次读取一行内容
seek(偏移量, 起始位置) 用来移动文件指针,起始位置:0:文件开头 1:当前位置 2:文件结尾

test.txt
在这里插入图片描述

read():

f = open('test.txt', 'r')
print(f.read(10))
f.close()

在这里插入图片描述

  • 文件内容如果换行,底层有\n,有字节占位,导致read书写参数读取出来的眼睛看到的个数和参数值不匹配
  • read不写参数表示读取所有; print(f.read())

realines()

f = open('test.txt', 'r')

con = f.readlines()
print(con)

f.close()

在这里插入图片描述

readline():

f = open('test.txt', 'r')

con = f.readline()
print(con)

con = f.readline()
print(con)

con = f.readline()
print(con)

f.close()

在这里插入图片描述
seek()

"""
语法: 文件对象.seek(偏移量, 起始位置)  0开头1当前2结尾
目标:
    1. r 改变文件指针位置:改变读取数据开始位置或把文件指针放结尾(无法读取数据)
    2. a 改变文件指针位置,做到可以读取出来数据
"""
# f = open('test.txt', 'r+')
f = open('test.txt', 'a+')

# 1. 改变读取数据开始位置
# f.seek(2, 0)
# 1. 把文件指针放结尾(无法读取数据)
# f.seek(0, 2)

# 2. a 改变文件指针位置,做到可以读取出来数据
# f.seek(0, 0)
f.seek(0)

con = f.read()
print(con)

f.close()

在这里插入图片描述

4. 文件和文件夹的操作

先导入os模块,再使用os.函数名

函数 描述
rename(目标文件名,新文件名) 重命名
remove(目标文件名) 删除文件
mkdir(文件夹名字) 新建文件夹
rmdir(文件夹名字) 删除文件夹
getcwd() 获取当前文件所在的目录路径
chdir(目录) 改变目录路径
listdir(目录) 获取某个文件夹下所有文件,返回一个列表
rename() 重命名文件夹
"""
1. 导入模块os
2. 使用模块内功能
"""
import os

1. rename(): 重命名
os.rename('1.txt', '10.txt')

2. remove(): 删除文件
os.remove('10.txt')

3. mkdir():创建文件夹
os.mkdir('aa')

4.rmdir(): 删除文件夹
os.rmdir('aa')

5. getcwd(): 返回当前文件所在目录路径
print(os.getcwd())

6. chdir():改变目录路径
os.mkdir('aa')
需求:在aa里面创建bb文件夹: 1. 切换目录到aa,2创建bb
os.mkdir('bb')

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

7. listdir(): 获取某个文件夹下所有文件,返回一个列表
print(os.listdir())
print(os.listdir('aa'))

8. rename() -- 重命名文件夹  bb重命名为bbbb
os.rename('bb', 'bbbb')

5. 文件备份

用户输入当前目录下任意文件名,程序完成对该文件的备份功能(备份文件名为xx[备份]后缀,例如:test[备份].txt

# 1. 用户输入目标文件  sound.txt.mp3
old_name = input('请输入您要备份的文件名:')
# print(old_name)
# print(type(old_name))

# 2. 规划备份文件的名字
# 2.1 提取后缀 -- 找到名字中的点 -- 名字和后缀分离--最右侧的点才是后缀的点 -
#- 字符串查找某个子串rfind
index = old_name.rfind('.')
# print(index)

# 4. 思考:有效文件才备份 .txt
if index > 0:
    # 提取后缀  切片
    postfix = old_name[index:]

# 2.2 组织新名字 = 原名字 + [备份] + 后缀
# 原名字就是字符串中的一部分子串 -- 切片[开始:结束:步长]
# print(old_name[:index])
# print(old_name[index:])
# new_name = old_name[:index] + '[备份]' + old_name[index:]
new_name = old_name[:index] + '[备份]' + postfix
print(new_name)

# 3. 备份文件写入数据(数据和原文件一样)
# 3.1 打开 原文件 和 备份文件
old_f = open(old_name, 'rb')
new_f = open(new_name, 'wb')

# 3.2 原文件读取,备份文件写入
# 如果不确定目标文件大小,循环读取写入,当读取出来的数据没有了终止循环
while True:
    con = old_f.read(1024)
    if len(con) == 0:
        # 表示读取完成了
        break

    new_f.write(con)

# 3.3 关闭文件
old_f.close()
new_f.close()

6. 批量修改文件名(添加指定字符串,删除指定字符串)

  • 把code文件夹所有文件重命名 Python_xxxx
  • 删除Python_ 重命名:1, 构造条件的数据 2. 书写if
import os

# 构造条件的数据
flag = 2

# 1. 找到所有文件: 获取code文件夹的目录列表 -- listdir()
file_list = os.listdir()
print(file_list)

# 2. 构造名字
for i in file_list:
    if flag == 1:
        # new_name = 'Python_' + 原文件i
        new_name = 'Python_' + i
    elif flag == 2:
        # 删除前缀
        num = len('Python_')
        new_name = i[num:]
# 3. 重命名
    os.rename(i, new_name)

Guess you like

Origin blog.csdn.net/weixin_44121966/article/details/119972674