1、编码格式介绍
常见的字符编码格式
- Python的解释器使用的是Unicode(内存)
- .py文件在磁盘上使用UTF-8存储(外存)
GB-这些是中文的字符
.py文件默认UTF-8,
修改编码格式:在程序最上面加上以下代码,则文件格式变为 ANSI
# encoding = gbk
2、文件的读写原理
- 文件读写操作-“I/O操作”
- 文件读写操作流程
- 操作原理
3、文件读写操作
- 内置函数open()创建文件对象
- 语法规则
操作方法:
1、建立a.txt文本文档,用记事本打开,另存为ANSI格式。a.txt内容如下:
中国 美丽2、在PyCharm中打开a.txt文件,出现乱码,转为GBK文件
3、在.py文件中输入以下程序,即可在python中读取文件
# Name: Python study # Designer: MilesHugh # Time: 2023/4/14 15:40 print('你好,中国') # file = open(filename[,mode,encoding]) file = open('a.txt', 'r') # 创建磁盘中的文件在python中的对象 print(file.readlines()) # 读取列表,将所有行的东西放在一行列表中 file.close() # 关闭系统资源
4、常用的文件打开模式
文件类型——按照文件中数据的组织形式可以分为:
- 文本文件:存储的是普通“字符”文本,默认为Unicode字符集,可以用记事本程序打开
- 二进制文件:把数据内容用“字节”进行存储,无法用记事本打开,必须用专用的软件打开。如mp3音频文件、jpg图片、doc文档等
打开模式 | 描述 |
r | 以只读模式打开文件,文件的指针将会放在文件的开头 |
w | 以只写模式打开文件,如果文件不存在则创建,如果文件存在,则覆盖原有内容,文件指针在文件的开头 |
a | 以追加模式打开文件,如果文件不存在则创建,文件指针在文件开头,如果文件存在,则在文件末尾追加内容,文件指针在原文件末尾 |
b | 以二进制方式打开文件,不能单独使用,需要与其他模式一起使用,rb或wb |
+ | 以读写方式打开文件,不能单独使用,需要与其他模式一起使用,a+ |
文件操作:
# Name: Python study # Designer: MilesHugh # Time: 2023/4/14 16:12 # 文件写操作 file = open('b.txt', 'w') # file.write('hello world') file.write('python') file.close() # 文件追加操作 file = open('b.txt', 'a') file.write('python') file.close()
图片拷贝操作:
# Name: Python study # Designer: MilesHugh # Time: 2023/4/14 16:15 # 图片拷贝操作 src_file = open('py.png', 'rb') target_file = open('copy_py.png', 'wb') target_file.write(src_file.read()) target_file.close() src_file.close()
5、文件对象常用的方法
方法名 | 说明 |
read([size]) | 从文件中读取size个字节或字符的内容返回。若省略[size],则读取到文件末尾,即一次读取文件所有内容 |
readline() | 从文本文件中读取一行内容 |
readlines() | 把文本文件中每一行都作为独立的字符串对象,并将这些对象放入列表返回 |
write(str) | 将字符串str内容写入文件 |
writelines(s_list) | 将字符串列表s_list写入文本文件,不添加换行符 |
seek(offset[,whence]) | 把文件指针移动到新的位置,offset表示相对于whence的位置: offset:为正往结束方向移动,为负往开始方向移动 whence不同值代表不同含义: 0:从文件头开始计算(默认值) 1:从当前位置开始计算 2:从文件尾开始计算 |
tell() | 返回文件指针的当前位置 |
flush() | 把缓冲区的内容写入文件,但不关闭文件 |
close() | 把缓冲区的内容写入文件,同时关闭文件,释放文件对象相关资源 |
6、with语句(上下文管理器)
- with语句可以自动管理上下文资源,不论什么原因跳出with块,都能确保文件正确的关闭,以此来达到释放资源的目的
上下文管理器:
# Name: Python study # Designer: MilesHugh # Time: 2023/4/14 16:42 ''' 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方法被调用执行了') with MyContentMgr() as file: # 相当于 file = MyContentMgr() file.show()
with语句的使用:
# Name: Python study # Designer: MilesHugh # Time: 2023/4/14 16:38 print(type(open('a.txt', 'r'))) with open('a.txt', 'r') as file: print(file.read()) # 利用with语句进行图像的拷贝 with open('py.png', 'rb') as src_file: with open('copy2_py.png', 'wb') as target_file: target_file.write(src_file.read())
6、目录操作
- os模块是Python内置的与操作系统功能和文件系统相关的模块,该模块中的语句的执行结果通常与操作系统有关,在不同的操作系统上运行,得到的结果可能不一样。
- os模块与os.path模块用于对目录或文件进行操作
os模块的操作:
# Name: Python study # Designer: MilesHugh # Time: 2023/4/14 16:53 # os模块与操作系统相关的一个模块 import os os.system('notepad.exe') # 打开记事本 os.system('calc.exe') # 打开计算器 # 直接调用可执行文件 os.startfile('D:\\Tencent\\QQ\\Bin\\qq.exe') # 打开应用程序QQ
函数 | 说明 |
getcwd() | 返回当前的工作目录 |
listdir(path) | 返回指定路径下的文件和目录信息 |
mkdir(path[,mode]) | 创建目录 |
makedirs(path1/path2...[,mode]) | 创建多级目录 |
rmdir(path) | 删除目录 |
removedirs(path1/path2......) | 删除多级目录 |
chdir(path) | 将path设置为当前工作目录 |
# Name: Python study
# Designer: MilesHugh
# Time: 2023/4/14 17:07
import os
print(os.getcwd())
lst = os.listdir('../new')
print(lst)
# os.mkdir('new2')
os.makedirs('A/B/C')
函数 | 说明 |
abspath(path) | 用于获取文件或目录的绝对路径 |
exists(path) | 用于判断文件或目录是否存在,如果存在返回True,否则返回False |
join(path,name) | 将目录与目录或者文件名拼接起来 |
splitext | 分离文件名和扩展名 |
basename(path) | 从一个目录中提取文件名 |
dirname(path) | 从一个路径中提取文件路径,不包括文件名 |
isdir(path) | 用于判断是否为路径 |
实例1:列出指定目录下的所有py文件
# Name: Python study # Designer: MilesHugh # Time: 2023/4/14 17:15 # 列出指定目录下的所有py文件 import os path = os.getcwd() lst = os.listdir(path) for filename in lst: if filename.endswith('.py'): print(filename)
实例2:遍历所有的目录文件
# Name: Python study # Designer: MilesHugh # Time: 2023/4/14 17:19 # 遍历所有的目录文件 import os path = os.getcwd() lst_files = os.walk(path) # 可以建立指定目录下的所有文件目录 for dirpath, dirname, filename in lst_files: print(dirpath) print(dirname) print(filename) print('----------') for dir in dirname: print(os.path.join(dirpath, dir)) print('---------') for file in filename: print(os.path.join(dirpath, dir))