对本地文件的操作步骤,常见有以下几种:
- 打开文件所在位置
- 打开文件
- 操作文件
- 关闭文件
文件操作的作用:
文件的操作包括:打开、关闭、读、写、复制...
作用:读取内容、写入内容、备份内容,把一些内容(数据)存储起来,方便下次直接使用,省时省力。
open():打开文件
在python,使⽤open()函数,可以打开⼀个已经存在的文件,或者创建⼀个新文件,语法如下:
语法:open(file, mode = 'r', encoding = utf-8)
file:文件路径,是要打开的目标文件名的字符串(可以包含文件所在的具体路径)
mode:设置操作文件的访问模式(r只读、w写入、a追加)
encoding:指定文件编码格式
w(写入)模式:当文件不存在时创建文件,再次写入时会覆盖原来的内容。
- f.writable() --> 判断是否可写
- f.write(str) --> 写入内容,返回值为写入字符串的长度
- f.writelines(seq) --> 写入多行,但需要自己添加换行符
f = open('test_001.txt', mode='w', encoding='utf-8')
# 判断是否可写入
print(f.writable()) # 返回布尔值,True
# 写入内容
f.write('这里是我写入的内容')
# 写入多行
f.writelines('今天是5月25号,\n今天开始学习文件的常见操作。')
# 关闭文件:释放资源
f.close()
a(追加)模式:当文件不存在时创建文件,再次写入时为追加。
fi = open('text_002.txt', mode='w+', encoding='utf-8')
# 判断是否可写
print(fi.writable())
# 写入内容
fi.write('换成中文\n')
# 写入多行
# fi.writelines('a(追加)模式,\n写入多行内容')
# 关闭文件:释放资源
fi.close()
总结:
w(写入)、a(追加):如果文件不存在则创建该文件; 若文件存在,w(写入)模式会清空后再写入;
a(追加)则是直接在末尾追加。
r(只读)模式:
- f.readable() --> 判断是否可读,返回值为布尔
- f.read(n) --> 读取全部,在python3中n为字符
- f.readline() --> 逐行读取,包括\n
- f.readlines() --> 读取所有,返回值为列表,包括\n
- f.tell() --> 文件指针所处文件位置
- seek() --> 作用:用来移动文件指针
# f_3 = open('text_003.txt', mode='r', encoding='utf-8') 文件不存在,直接报错
f_3 = open('text_002.txt', mode='r', encoding='utf-8')
# 判断是否可读
print(f_3.readable()) # True
# 逐行读取
# print(f_3.readline()) # 只读取一行内容:这个文件是a(追加)模式a(追加)模式,
# 读取所有,返回值为列表
# print(f_3.readlines())
# 读取文件的全部内容read():
print('调用read()读取全部内容:', f_3.read())
tell():判断文件指针当前所处的位置:
一个汉字,代表 3 个字节
换行,代表 2 个字节
数字/英文/小数点/下划线/空格,代表 1 个字节
\n,代表 1 个字节
f_4 = open('text_002.txt', mode='r', encoding='utf-8')
print('判断文件指针当前所处的位置:', f_4.tell()) # 最开始时,在起始位置,0
print('逐行读取内容:', f_4.readline()) # 读取一行内容
print(f_4.tell()) # 逐行读取后,指针停在该行的结束位置
# print(f_4.readline()) # 只有一行内容时,逐行读取结束后再调用逐行读取,打印为空
# print(f_4.tell())
seek():指定指针位置:
f_5 = open('text_002.txt', mode='r', encoding='utf-8')
print(f_5.tell()) # 0
print(f_5.read(1)) # 读取一个字节,文件指针自动后移1个数据
print(f_5.tell())
print(f_5.seek(3))
print(f_5.read(2))
print(f_5.tell())
验证拓展:
"""事实证明,python11中,\n占一个字节"""
with open('test_003.txt', mode='w') as f:
f.writable()
f.write('\n')
print("文件指针当前位置:", f.tell())
"""老师的代码,运行出来,\n也是占一个字节,应该是和 python 版本有关系"""
f = open('text02.txt', mode='w', encoding='utf-8')
print(f.tell())
f.write('\n')
print(f.tell())
文件备份:
首先,文件要存在,才能备份,否则直接上来就随便输入一个文件名,并进行备份,会报错。
其次,已经备份过的文件,再次运行程序,不会继续备份。
"""
备份思路:
1、接收用户输入的目标文件名(xx)
2、规划备份文件名(xx备份.后缀)
3、备份文件写入数据
"""
old_name = input('输入文件名:')
index = old_name.find('.')
# 在原有的文件名加上备份俩字
new_name = old_name[:index] + '备份' + old_name[index:]
"""备份文件写入数据:"""
old_f = open(old_name, 'r') # 读取旧文件
new_f = open(new_name, 'w') # 写入新文件
contents = old_f.readlines() # 读取旧文件的所有内容
print('这是读取的旧文件中的所有内容:', contents)
new_f.writelines(contents) # 全部写入新文件中
old_f.close()
new_f.close()
文件与文件夹的操作:
在Python中文件和文件夹的操作要借助os模块里面的相关功能,具体步骤如下:
os.getcwd() --> 用来打印当前工作目录
os.chdir() --> 改变当前工作目录
os.makedirs() --> 以递归方式创建多个文件夹
os.removedirs() --> 以递归方式删除多个空文件夹
os.mkdir() --> 创建单个文件夹
os.rmdir() --> 删除单个空文件夹
os.path.exists() --> 判断该路径下的文件或文件夹是否存在
os.path.join() --> 拼接路径
导入os模块:
import os
文件重命名:
os.rename(目标文件名,新文件名)
删除文件
os.remove(目标文件名)
创建文件夹
os.mkdir(文件夹的名字)
删除文件夹
os.rmdir(文件夹名字)
获取当前目录
os.getcwd()
改变默认目录
os.chdir(目录)
获取目录列表
os.listdir(目录)
更改文件/文件夹的位置:
import os
print(os.getcwd()) # 获取当前目录
# os.chdir('//Users//username//Desktop//Maria//python//basics//Day14_文件的操作')
# 改变默认目录:
# os.chdir('//Users//username//Desktop//')
# print(os.getcwd())
创建文件夹(以递归的方式创建多个文件夹):
"""只创建一次,已存在的话则报错:File exists"""
os.makedirs('//Users//username//Desktop//Maria//python//basics//Day14_文件的操作//aaa//bbb') # 以递归的方式创建多个文件夹
os.rmdir('aaa') # 删除文件夹:报错,因为不是一个空文件夹
# 判断该路径下的文件或文件夹是否存在
print(os.path.exists('//Users//username//Desktop//')) # True
关闭文件:
"""上下文管理器方法,不用我们手动的去关闭文件,会在运行完之后自动关闭"""
fi_1 = open('test_001.txt', mode='w', encoding='utf-8')
fi_1.close()
"""建议这样关闭文件:"""
with open('test_004.txt', mode='w', encoding='utf-8') as fi_1:
fi_1.writable() # 判断是否可写入
fi_1.write('这是写入的内容')
简易的批量重命名:
import os
# os.chdir() 改变当前工作目录
os.chdir('//Users//liangli//Desktop//批量重命名')
print(os.getcwd()) # 打印当前工作目录
# 遍历此路径下的文件
file_list = os.listdir(os.getcwd())
print(file_list)
for file in file_list:
# 循环拼接
new_name = '01_' + file
print(new_name)
os.rename(file, new_name)