python基础06-文件操作
文件操作
一、文件的作用
- 把一些长期存储存放起来,可以让程序下一次执行的时候直接使用,而不必重新制作一份,省时省力
- 持久化储存数据
二、文件的打开与关闭
1. 文件操作流程
- 打开文件,或者新建立一个文件
- 读/写数据
- 关闭文件
2. 打开文件
在Python,使用open函数,可以打开一个已经存在的文件,或者创建一个新文件:
文件变量 = open(文件名字,访问模式)
- 注意:文件名字,访问模式都是字符串格式
示例如下:
# 'w': 只写方式打开文件,文件不存在创建,文件存在,清空文件内容
f = open('xxx.txt', 'w')
说明:
访问模式 | 说明 |
---|---|
r | 只用于读取, 默认模式。文件不存在,会报错。 |
w | 只用于写入。文件存在则先清空内容, 文件不存在,创建新文件。 |
3. 关闭文件
3.1 手动关闭文件
- 关闭文件,为了释放资源
- 语法格式:
文件变量.close()
示例如下:
# 'w': 只写方式打开文件,文件不存在创建,文件存在,清空文件内容
f = open('xxx.txt', 'w')
# 关闭文件,为了释放资源
# 文件变量.close()
f.close()
3.2 自动关闭文件
with open("123.txt", "w") as f:
pass # 执行完缩进代码, 会自动关闭文件
三、文件的读写
1. 写数据
- 使用 write() 可以完成向文件写入数据
- 语法格式:
文件变量.write(所需的内容)
示例代码:
# 1. 打开文件,只写方式打开
f = open('xxx.txt', 'w')
# 2. 写文件
# 写文件格式:文件变量.write(所需的内容)
f.write('hello abc')
f.write(' hello python')
# 3. 关闭文件
f.close()
2. 读数据
2.1 read
格式语法:
内容变量 = 文件变量.read(n)
- n 为读取的字符数,不设置则全部读取
案例演练:
xxx.txt
文件内容如下:hello abc hello python
示例代码:
# 1. 打开文件,只读方式打开,'r'
# 'r': 打开文件,必须存在,不存在,报错崩溃
f = open('xxx.txt', 'r')
# 2. 读取文件内容
# 格式: 内容变量 = 文件变量.read(读取的长度)
# 如果read的长度不指定,默认读取全部
ret = f.read(4) # 读取4个字符
print(ret)
# 下次,继续接着上一次的位置
ret = f.read(7) # 接着读取7个字符
print(ret)
ret = f.read() # 接着读取剩下所有个字符
print(ret)
# 3. 关闭文件
f.close()
2.2 readlines
readlines()
一次全部读出,读取所有的行,按行作为分隔条件,返回列表 (每行内容是一个元素)- 语法格式:
内容列表变量 = 文件变量.readlines()
案例演练:
xxx.txt
文件内容如下:hello abc hello python hello mike
示例代码:
# 1. 打开文件,只读方式打开,'r'
# 'r': 打开文件,必须存在,不存在,报错崩溃
f = open('xxx.txt', 'r')
# 2. 读取文件内容
# readlines: 读取所有的行,按行作为分隔条件
# 格式:内容列表变量 = 文件变量.readlines()
content_list = f.readlines()
# '\n'换行符,代表换行
print(content_list)
# 通过for取出列表的所有元素
for v in content_list:
print(v)
# 3. 关闭文件
f.close()
2.3 readline
readline()
每次读取一行数据- 语法格式:
内容变量 = 文件变量.readline()
案例演练:
xxx.txt
文件内容如下:hello abc hello python hello mike
示例代码:
# 1. 打开文件,只读方式打开,'r'
# 'r': 打开文件,必须存在,不存在,报错崩溃
f = open('xxx.txt', 'r')
# 2. 读取文件内容
# readlines: 读取所有的行
# readline: 一次读取一行
# readline格式:内容变量 = 文件变量.readline()
content = f.readline()
print(content)
content = f.readline()
print(content)
content = f.readline()
print(content)
# 3. 关闭文件
f.close()
四、打开文件详解
1. 访问模式说明
访问模式 | 说明 |
---|---|
r | 只用于读取, 默认模式。文件不存在,会报错。 |
w | 只用于写入。文件存在则先清空内容, 文件不存在,创建新文件。 |
a | 只用于写入。文件存在则追加内容, 文件不存在,创建新文件。 |
r+ | 用于读写。文件不存在,会报错。 |
w+ | 用于读写。文件存在则先清空内容, 文件不存在,创建新文件。 |
a+ | 用于读写。文件存在则追加内容, 文件不存在,创建新文件。 |
rb | 二进制格式的只读操作。后续网络课程中具体讲解。 |
wb | 二进制格式的只写操作。后续网络课程中具体讲解。 |
ab | 二进制格式的追加操作。后续网络课程中具体讲解。 |
1.1 只读方式打开文件
- 只读方式打开文件,文件不存存在,报错
示例代码:
# 'r',只读方式打开文件,文件不存存在,报错
f = open('abc.txt', 'r')
f.close()
1.2 只写方式打开文件
- 只写方式打开文件,文件不存在新建,文件存在清空文件内容
示例代码:
# 'w',只写方式打开文件,文件不存在新建,文件存在清空文件内容
f = open('abc.txt', 'w')
f.close()
1.3 追加方式打开文件
- 追加方式打开文件,文件不存在新建,文件存在写光标则放在文件末尾,写数据直接写在文件末尾
- 注意:追加方式打开文件,不会清空文件内容
案例演练:
abc.txt
文件内容如下:hello abc hello python hello mike
示例代码:
# 1. 'a',追加方式打开文件
f = open('abc.txt', 'a')
# 2. 写数据
f.write('^_~')
# 3. 关闭文件
f.close()
2. 打开文件路径说明
2.1 open第一个参数说明
open
第一个参数,实际上是路径 + 文件名
- 路径主要分为:绝对路径和相对路径
2.2 绝对路径和相对路径
绝对路径:是指文件在硬盘上真正存在的路径,是电脑完整的路径
如 windows 平台下:
E:\Code\PyCode
注意:写代码的时候,windows下路径的
\
需要改为\\
或者改为/
'E:\\Code\\PyCode\\abc.txt' 'E:/Code/PyCode/abc.txt' # 推荐这种写法
一般而言,写程序很少使用到绝对路径,因为程序在本机运行可以找到这个绝对路径,但是,把程序拷贝给别人运行,别人电脑不一定有这个路径
相对路径:相对于自己的目标文件位置
1.txt`:等价于`./1.txt`,当前路径下的`1.txt ../1.txt: 上一级路径下的1.txt
五、应用:文件备份案例
1. 功能演示
- 输入文件的名字,然后程序自动完成对文件进行备份
2. 示例代码
"""
a. 输入需要拷贝的文件名 old_file_name = input()
b. 找文件名字右边的第一个点,通过切片组装成: 旧文件名[备份].后缀
1. 只读方式打开源文件(旧文件)
2. 只写方式打开新的备份文件(新文件)
3. while True:
4. 一次读取一点源文件的内容
5. 如果读取的内容,往写文件中写
6. 如果没有读到内容,文件已经读取完毕,break跳出循环
7. 关闭文件
"""
# a. 输入需要拷贝的文件名 old_file_name = input()
old_file_name = input('输入需要拷贝的文件名: ')
# b. 找文件名字右边的第一个点,通过切片组装成: 旧文件名[备份].后缀
# 找文件名字右边的第一个点,rfind, r为right, 从右往左找
pos = old_file_name.rfind('.')
new_file_name = old_file_name[0:pos] + '[备份]' + old_file_name[pos:]
# 1. 只读方式打开源文件(旧文件),加上'b'选项,二进制的意思,为了处理任何类型的文件
src_f = open(old_file_name, 'rb')
# 2. 只写方式打开新的备份文件(新文件),加上'b'选项,二进制的意思,为了处理任何类型的文件
dst_f = open(new_file_name, 'wb')
# 3. while True:
while True:
# 4. 一次读取一点源文件的内容
ret = src_f.read(1024)
# 5. 如果读取的内容,往写文件中写
if ret:
dst_f.write(ret)
# 6. 如果没有读到内容,文件已经读取完毕,break跳出循环
else:
break
# 5. 关闭文件
src_f.close()
dst_f.close()
六、文件的相关操作
1. 文件的相关操作
有些时候,需要对文件进行重命名、删除等一些操作,Python的 os 模块中都有这么功能
操作流程:
# 1. 导入模块,只需导入一次即可
import os
# 2. 使用os中的方法,完成功能
os.方法名()
1.1 文件重命名
- os模块中的rename()可以完成对文件的重命名操作
- 语法格式:
os.rename(旧的文件名,新的文件名)
import os
os.rename("毕业论文.txt", "毕业论文-最终版.txt")
1.2 删除文件
- os模块中的remove()可以完成对文件的删除操作,不能删除文件夹
- 语法格式:
os.remove(待删除的文件名)
import os
os.remove("毕业论文.txt")
1.3 创建文件夹
- 创建文件夹,只能创建文件夹,不能创建普通文件
- 语法格式:
os.mkdir(文件夹的名字)
import os
os.mkdir("张三")
1.4 删除空文件夹
- 删除文件夹,只能删除空的文件夹
- 语法格式:
os.rmdir(待删除文件夹的名字)
import os
os.rmdir("张三")
1.5 获取当前目录
- 获取当前工作的路径
- 语法格式:
路径变量 = os.getcwd()
import os
work_path = os.getcwd()
print(work_path)
1.6 改变默认目录
- 改变默认目录,切换指定的路径
- 语法格式:
os.chdir(改变的路径)
import os
os.chdir("../") # 切换到上一级路径
1.7 获取目录列表
获取某个目录的文件信息,获取文件夹或文件的名字
语法格式:
目录列表变量 = os.listdir(指定某个目录)
- 如果不指定目录,默认当前路径
import os
temp_list = os.listdir() # 获取当前目录下的文件信息
print(temp_list)
1.8 判断文件是否存在
语法格式:
os.path.exists(需要判断的文件)
- 如果文件存在返回
True
,如果文件不存在返回False
- 如果文件存在返回
import os
ret = os.path.exists('1.txt')
print(ret)
2. 应用:批量修改文件名
示例代码
"""
1. 获取pytest的目录信息,返回文件名的列表
2. 切换到目标路径
3. for遍历文件名的列表取出某个元素
4. 对这个元素重命名
"""
import os
# 1. 获取pytest的目录信息,返回文件名的列表
name_list = os.listdir('pytest')
# print(name_list)
# 2. 路径切换
os.chdir("pytest")
# 3. for遍历取出文件名的列表某个元素
for name in name_list:
# print(name)
# 4. 对这个元素重命名
new_name = '[黑马出品]-' + name
os.rename(name, new_name)
七、文件版学生名片管理系统
1. 字符串、容器类型相互转换
函数 | 说明 |
---|---|
str(容器变量) | 将 容器变量 转换为一个字符串 |
eval( 字符串内容 ) | 返回传入字符串内容的结果,字符串里面看到像是什么,就转换成什么 |
示例代码:
# 列表
user_list = [{'name': 'mike', 'age': 34, 'tel': 110},
{'name': 'yoyo', 'age': 30, 'tel': 120}]
# 列表转字符串
temp_str = str(user_list)
print(temp_str, type(temp_str))
# 字符串
my_str = "[{'name': 'mike', 'age': 34, 'tel': 110}, {'name': 'yoyo', 'age': 30, 'tel': 120}]"
# 字符串转列表
# eval(), 看到像什么,就转换什么
my_list = eval(my_str)
print(my_list, type(my_list))
运行结果:
[{'name': 'mike', 'age': 34, 'tel': 110}, {'name': 'yoyo', 'age': 30, 'tel': 120}]
[{'name': 'mike', 'age': 34, 'tel': 110}, {'name': 'yoyo', 'age': 30, 'tel': 120}]
2. 文件版学生名片管理系统
2.1 保存数据
def save_info():
"""名片信息保存到文件"""
# 1. 通过with打开文件,自动处理关闭
with open('stu.txt', 'w') as f:
# 2. 将列表转换为字符串后,再往文件中写
f.write(str(user_list))
2.2 读取数据
def load_info():
"""加载数据"""
# 1 判断文件是否存在,不存在,中断函数
# 文件开头需要 import os
if not os.path.exists('stu.txt'):
print('文件不存在,无法加载')
return
# 2 文件存在的时候,加载数据
# 2.1 通过with打开文件,只读方式打开文件
with open('stu.txt', 'r') as f:
# 2.2 文件变量.read()读取所有内容,返回内容是字符串类型
content = f.read()
# 2.3 global 声明user_list全局变量
global user_list
# 2.4 把读取内容通过eval转换成列表,给全局变量的列表赋值
user_list = eval(content)
print('数据成功加载')
版权声明:本博客所有文章除特殊声明外,均采用 CC BY-NC 4.0 许可协议。转载请注明出处 caijinbo的博客!