python 文件操作大总结 对文件的增删改查,备份, 批量修改,创建和删除 文件的备份

python 的文件操作

文件的作用

  1. 永久的保存数据
  2. 文件中的内存保存在硬盘中
  3. 硬盘中的数据都是 0 和 1, 软件将 0 和 1的组合转换成我们认识的汉字

绝对路径和相对路径

  • 绝对路径:是从目录开始的路径
  • 相对路径: 以代码文件为参考的位置<.当前位置…上一级目录>
  • 每个路径之间可以使用 / 隔开
  • windows 下的注意点: \ 反斜杠是转义字符
  • f = open(‘C:\Users\nl\Desktop\code\day07\b.txt’, ‘w’, encoding=‘utf-8’)
  • 在字符串之前写上 r,字符串不再进行转义
    f = open(r’C:\Users\nl\Desktop\code\day07\b.txt’, ‘w’, encoding=‘utf-8’)

打开文件

打开文件 open(file, mode=“r”, encoding)

  1. file 为文件名,要打开的文件,类型的str.
  2. 打开的方式, mode=“r” 是缺省参数, r read 只读, w write 只写, a append 追加
  3. encoding 打开文件的编码(怎么将汉字变为二进制(0,1)),常见的编码有 utf-8(一个汉字三个字节)
  4. gbk(一个汉字两个字节), open( 函数), 在windows下默认是gbk方式打开, 在Linux 和 mac 下,默认是 utf-8 打开
  5. pycharm 的默认打开方式为 utf-8
  6. 返回值, 返回一个文件对象, 要通过文件对象操作文件
打开方式 文件是否存在
w 只写,文件指针在文件的开头 文件存在, 覆盖原文件.文件不存在, 创建文件
a 追加, 文件指针在文件的末尾 文件存在, 文件末尾追加内容,文件不存在,创建文件,写入内容使用文件对象.write()
r 只读 文件存在, 打开文件,文件指针的文件开头.文件不存在,程序报错. read() 会移动文件指针

文件的读写

  1. 写文件 文件对象.write(字符串)
  2. 参数就是写入的内容
  3. 返回值, 写入的长度
  4. 文件对象.close 关闭文件. 关闭文件之后,文件对象不能使用, 不能再对文件进行操作,关闭的同时会自动保存文件
f = open('a.txt', 'w', encoding='utf-8')
num = f.write("hello")
print(num)

#  控制台输出
5
  1. 读文件使用read()函数
  2. 文件对象.read(num) num代表读取多少字节, num可以不写,代表读取全部
  3. 返回值是读取的内容,str
  4. \n 也占一个字符
"""
b.txt 中的内容为:
aaa12
454
65
56
2
23
"""
f =open("b.txt", "r", encoding="utf-8")
buf = f.read(4)
print(buf)
print("*************")
buf1 = f.read()
print(buf1)
f.close()

# 控制台输出
aaa1
***************
2
454
65
56
2
23

文件的追加操作

  1. a 方式打开文件,向文件中写入内容,使用的是write()函数
  2. “a” 方式打开文件,文件指针在文件的末尾
"""
b.txt中的内容为:
aaa12
454
65
56
2
23
"""
f =open("b.txt", "a", encoding="utf-8")
f.write("hello\nworld")
f.write("")
f.close

# 控制台输出
aaa12
454
65
56
2
23hello
world

文件的其他读取操作

  1. 文件对象.readline()
  2. 按行读取,一次读取一行
  3. 文件对象.readlines()
  4. 按行读取,一次读取所有行, 列表中的每一个元素都是一行的内容
"""
b.txt 中的内容
aaa12
454
65
56
2
23hello
world
"""
f = open("b.txt", "r", encoding="utf-8")
buf = f.readline()
print(buf)
buf = f.readline()
print(buf)
print('*************')

my_list = f.readlines()
print(my_list)
f.close

# 控制台输出
aaa12

454

********
['65\n', '56\n', '2\n', '23hello\n', 'world']

模拟读取大文件


f = open("b.txt", "r", encoding="utf-8")
while True:
	buf = f.readline()
	if buf:
		print(buf, end="")
	else:
		break
f.close()

# 控制态输出
aaa12
454
65
56
2
23hello
world

文件的备份案例

思路:

1.输入要备份的文件
2. 对文件进行切片操作
3. 只读打开文件
4. 写 打开备份文件
5. 读取文件的内容
6. 将读取的内容写入到备份文件
7. 关闭文件和备份文件

# 1. 输入要备份的文件
file_name = input("请输入你想备份的文件")
# 2. 对文件进行切片操作
num = file_name.rindex(".")
#                 文件名字         [备份]        文件后缀
new_file_name = file_name[:num] + "[备份]" +  file_name[num:]
# 3. 只读打开文件
f = open(file_name, "r", encoding="utf-8")
# 4. 写打开备份文件
new_f = open(new_file_name, "w", encoding="utf-8")
# 5. 读取文件的内容
buf = f.read()
# 6. 将读取的文件写入到备份文件
new_f.write(buf)
# 7. 关闭文件
f.close()
new_f.close()

文件备份案例升级版-----支持二进制文件

# 1. input 输入要备份的文件 xxx.后缀
file_name = input("请输入要备份的文件:")

# 2.  xxx.后缀  —> xxx[备份].后缀
# 2.1 对 xxx.后缀 进行切片操作
num = file_name.rindex('.')
# new_file_name = 'a[备份].txt'
#               文件名字                        后缀
new_file_name = file_name[:num] + "[备份]" + file_name[num:]

# 1. 读打开 a.txt, 二进制方式打开文件,不能指定 encoding参数
f = open(file_name, 'rb')
# 2. 写打开 a[备份].txt
new_f = open(new_file_name, 'wb')
# 3. 读取 a.txt 文件中的内容
buf = f.read()  # bytes
# 4. 将读取到内容写入到 a [备份].txt
new_f.write(buf)   # bytes
# 5. 关闭 a.txt
f.close()
# 6. 关闭 a [备份].txt
new_f.close()

with打开文件

with可以自动的关闭文件, 不需要手动关闭, 上下文管理器

# as 起别名
# with 可以自动的关闭文件, 不需要手动关闭, 上下文管理器
with open('a.txt', 'r', encoding="utf-8") as f:
    buf = f.read()
    print(buf)

# 控制台输出
aaa
vvv
bbb
xxx
xxxxxxxxx

文件和目录的常见目录

  1. 导入os包
  2. 文件重命名 ----> os.rename(原文件名, 新文件名)
  3. 删除文件, 只能删除文件, 不能删除目录 ----> os.remove()
  4. 创建文件夹(目录) ----> os.mkdir()
  5. 获取当前程序路径path = os.getcwd() print(path)
  6. 改变默认目录 change dir ----> os.chdir(“b”) #进入 b 这个文件夹
  7. 获取目录列表(目录中的文件), 返回的是列表file_list = os.listdir print(file_list)
  8. 删除目录, 删除空目录 ----> os.rmdir()
  9. 判断文件是否存在, 返回的是 bool 类型 result = os.path.exists("a.txt") print(result)

批量创建文件

import os


def create_files():
	"""批量创建文件"""
	for i in range(10):
		file_name = f"b/file{i}.txt"
		f = open(file_name, "w")
		f.close()


create_files()

批量修改文件名

import os


def change_file():
	"""
	批量修改文件名, 添加前缀
    :param path: 目录,修改哪个目录
    :return:
	"""
	# 获取目录中有哪些文件
	file_list = o.listdir(path)
	# 遍历
	for file in file_list:
		new_file = 'python333-' + file
		os.rename(path + '/'+file, path + '/' + new_file)


change_files('b')


def change_file_2(path):
	"""
	批量修改文件名, 删除前缀
    :param path: 目录,修改哪个目录
	"""
	# 先获取当钱工作目录
	old_path = os.getcwd()
	# 切换到 path 目录
	os.chdir(path)
	file_list = os.listdir()
	print(file_list)
	# 修改
	for file in file_list:
		num = len('python333-')
		new_file = file[num:]
		os.rename(file, new_file)

	# 恢复到之前的目录
	os.chdir(old_path)


change_file_2()

批量删除文件

import os


def delete_files():
	#想删除文件的名字
	for i in range(10):
		file = "file-%d" %i
		os.remove(file)


delect_files()

在这里插入图片描述
在这里插入图片描述

发布了56 篇原创文章 · 获赞 17 · 访问量 2160

猜你喜欢

转载自blog.csdn.net/LanlanDeming/article/details/103435002