目录
1、编码格式介绍
python文件默认的编码格式是:UTF-8
在代码文件中前面添加编码格式:endoding=GBK
2、文件的读写原理
3、文件读写操作
# encoding=UTF-8
# 作 者:要努力,努力,再努力
# 开发日期:2022/4/24 10:32
file = open('a.txt', 'r')
print(file.readlines())
file.close()
代码输出:['中国\n', '美丽']
打开模式 | 描述 |
r | 以只读模式打开文件,文件的指针将会放在文件的开头 |
w | 以只写模式打开文件,如果文件不存在则创建,如果文件存在,则覆盖原有内容,文件指针在文件的开头 |
a | 以追加模式打开文件,如果文件不存在则创建,文件指针在文件开头,如果文件存在,则在文件末尾追加内容,文件指针在原文件末尾 |
b | 以二进制方式打开文件,不能单独使用,需要与共它模式一起使用,rb,或者wb |
+ | 以读写方式打开文件,不能单独使用,需要与其它模式一起使用,a+ |
# encoding=UTF-8
# 作 者:要努力,努力,再努力
# 开发日期:2022/4/24 10:32
file = open('a.txt', 'a')
file.write('helloworld')
file.close()
src_file = open('logo.jpg', 'rb')
target_file = open('target.jpg', 'wb')
target_file.write(src_file.read())
target_file.close()
src_file.close()
4、文件对象常用的方法
方法名 | 说明 |
read([size]) | 从文件中读取 size 个字节或字符的内容返国。若宿略[size],则读取到文件末尾,即一次读取文忤所有内容 |
readline() | 从文本文件中读取一行内容 |
readlines() | 把文本文件中每一行都作为独立的字符串对象,并将这些对象放入列表返回 |
write(str) | 将字符串 str 内容写入文件 |
writelines(s_list) | 将字符串列表s_list写入文本文件,不添加换行符 |
seek(offset[, whence]) | 把文件指针移动到新的位置,offset 表示相对于 whence 的位置: offset :为正往结束方向移动,为负往开始方向移动 whence 不同的值代表不同含义: 0:从文件头开始计算(默认值) 1: 从当前位置开始计算 |
tell() | 返回文件指针的当前位置 |
flush() | 把缓冲区的内容写入文件,但不关闭文件 |
close() | 把缓冲区的内容写入文件,同时关闭文件。释放文件对象相关资源 |
read、 readline 、readlines 示例:
# 作 者:要努力,努力,再努力
# 开发日期:2022/4/24 11:20
file = open('a.txt', 'r')
# print(file.read(2))
# print(file.readline()) # 读一行
print(file.readlines()) # 读多行
file.close()
write、 writelines 示例:
# 作 者:要努力,努力,再努力
# 开发日期:2022/4/24 11:20
file = open('b.txt', 'a')
# file.write('hello')
lst = ['java', 'python', 'go']
file.writelines(lst)
file.close()
seek、tell 示例:
file = open('a.txt', 'r')
file.seek(2)
print(file.read())
print(file.tell())
file.close()
flush示例:
# 作 者:要努力,努力,再努力
# 开发日期:2022/4/24 11:40
file = open('d.txt','a')
file.write('hello')
file.flush()
file.write('world')
file.close()
5、with语句(上下文管理器)
下面的代码可以不用写 file.close() ,因为引用了上下文管理器:
# 作 者:要努力,努力,再努力
# 开发日期:2022/4/24 11:44
with open('a.txt', 'r') as file:
print(file.read())
# 作 者:要努力,努力,再努力
# 开发日期:2022/4/24 11:52
"""
MyContentMgr实现了两个特殊方法: __enter__ 和 __exit__ ,遵守上下文内容管理器协议
"""
class MyContentMgr(object):
def __enter__(self):
print('调用了 enter 方法')
return self
def __exit__(self, exc_type, exc_val, exc_tb):
print('调用了 exit 方法')
def show(self):
print('调用了show方法')
# print('调用了show方法', 1/0)
with MyContentMgr() as file: # 相当于 file = MyContentMgs()
file.show()
拷贝图片的代码可简写成这样:
with open('logo.jpg', 'rb') as src_file:
with open('logo2.jpg','wb') as target_file:
target_file.write(src_file.read())
6、目录操作
os 模块是 Python 内置的与操作系统功能和文件系统相关的模块,该模块中的语句的执行结果通常与操作系统有关,在不同的操作系统上运行,得到的结果可能不一样。
os 模块与 os.path 模块用于对目录或文件进行操作。
os 操作:
函数 | 说明 |
getcwd() | 返回当前的工作目录 |
listdir(path) | 返回指定路径下的文件和目录信息 |
mkdir(path[,mode]) | 创建目录 |
makedirs(path1/path2...[, mode]) | 创建多级目录 |
rmdir(path) | 删除目录 |
removedirs(path1/path2......) | 删除多级目录 |
chdir(path) | 将path设置为当前工作目录 |
# 作 者:要努力,努力,再努力
# 开发日期:2022/4/24 12:15
# os 模块与操作系统相关的模块
import os
# os.system('notepad.exe')
# os.system('calc.exe')
# os.startfile('D:\\Softwear\\QQ\\Bin\\qq.exe')
print(os.getcwd())
lst = os.listdir('../chap15')
print(lst)
# os.mkdir('newdir')
# os.makedirs('A/B/C')
# os.rmdir('newdir')
# os.removedirs('A/B/C')
os.chdir('D:\\Learning\\workspace\\Pycharm\\20220409\\chap14')
print(os.getcwd())
os.path操作:
函数 | 说明 |
abspath(path) | 用于获取文件或目录的绝对路径 |
exists(path) | 用于判断文件或目录是否存在,如果存在返回True,否则返回False |
join(path, name) | 将目录与目录或者文件名拼接起来 |
splitext() | 分离文件名和扩展名 |
basename(path) | 从一个目录中提取文件名 |
dirname(path) | 从一个路径中提取文件路径,不包括文件名 |
isdir(path) | 用于判断是否为路径 |
# 作 者:要努力,努力,再努力
# 开发日期:2022/4/24 12:39
import os.path
print(os.path.abspath('demo8.py'))
print(os.path.exists('demo3.py'), os.path.exists('nnn.py'))
print(os.path.join('E:\\Python', 'demo3.py'))
print(os.path.split('D:\\Learning\\workspace\\Pycharm\\20220409\\chap15\\demo8.py'))
print(os.path.splitext('demo8.py'))
print(os.path.basename('D:\\Learning\\workspace\\Pycharm\\20220409\\chap15\\demo8.py'))
print(os.path.dirname('D:\\Learning\\workspace\\Pycharm\\20220409\\chap15\\demo8.py'))
print(os.path.isdir('D:\\Learning\\workspace\\Pycharm\\20220409\\chap15\\demo8.py'))
print(os.path.isdir('D:\\Learning\\workspace\\Pycharm\\20220409\\chap15'))
示例:列出指定目录下的所有.py 文件
# 作 者:要努力,努力,再努力
# 开发日期:2022/4/24 12:46
# 列出指定目录下的所有.py 文件
import os
path = os.getcwd()
lst = os.listdir(path)
for filename in lst:
if filename.endswith('.py'):
print(filename)
walk: 把当前目录下的子文件也遍历出来
# 作 者:要努力,努力,再努力
# 开发日期:2022/4/24 12:50
import os
import os.path
path = os.getcwd()
lst_files = os.walk(path)
print(lst_files)
for dirpath,dirname,filename in lst_files:
# print(dirpath)
# print(dirname)
# print(filename)
# print('------------------')
for dir in dirname:
print(os.path.join(dirpath, dir))
for file in filename:
print(os.path.join(dirpath,file))
print('------------------')