编码格式
之前有写过一篇字符编码的笔记:python笔记——字符编码。这次主要是总结编码与python文件操作的关系。
1、中文文件改为gbk编码可以减少文件对磁盘的占用空间
2、UTF-8可以看作是Unicode的一个实现,在python中的区别主要是:
- python的解释器使用的是Unicode(内存)
- 模块(.py文件)在磁盘上使用的是UTF-8存储(外存)
3、当然可以在模块最上方修改它的编码格式,例如改为gbk。(改为gbk后发现编码格式变为ANSI,别担心,它跟GBK这些中文编码是一样的)
#encoding = gbk

文件的操作
文件的读写原理
1、.py文件的运行原理:
首先.py文件由解释器运行,运行过程中会调用操作系统os中的一些资源,以操作硬盘上的文件(读写操作)。

2、读写文件的操作步骤:
使用python操作文件,首先需要打开或新建文件,然后对文件进行读/写操作。当所有操作完成后,就关闭资源(比如执行.py文件中的代码时所调用的操作系统资源)。
文件的读写操作
1、内置函数open()创建文件对象/打开一个文件。
函数open()返回的实际上是文件在程序当中一个真实的映射对象,这个对象就对应磁盘上的文件,通过IO流将磁盘文件中的内容与程序中的对象中的内容进行同步。

2、语法规则

3、常用的文件打开模式
文件的类型——按文件中数据的组织形式,文件分为以下两大类
- 文本文件:存储的是普通“字符”文本,默认为unicode字符集,可以使用记事本打开
- 二进制文件:把数据内容用“字节”进行存储,无法用记事本打开,必须使用专用的软件打开,举例:mp3音频文件,jpg图片,.doc文档等
| 打开模式 | 描述 |
|---|---|
| r | 以只读模式打开文件,文件的指针将会放在文件的开头 |
| w | 以只写模式打开文件,如果文件不存在则创建,如果文件存在,则覆盖原有内容,文件指针在文件的开头 |
| a | 以追加模式打开文件,如果文件不存在则创建,文件指针在文件开头,如果文件存在,则在文件末尾追加内容,文件指针在原文件末尾 |
| b | 以二进制方式打开文件,不能单独使用,需要与其他模式一起使用,如rb或者wb |
| + | 以读写方式打开文件,不能单独使用,需要与其它模式一起使用,如a+ |
4、文件对象的常用方法
| 方法名 | 说明 |
|---|---|
| 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() | 返回文件指针的当前位置,位置从0开始计算 |
| flush() | 把缓冲区的内容写入文件,但不关闭文件 |
| close() | 把缓冲区的内容写入文件,同时关闭文件,释放文件对象的相关资源 |
with语句(上下文管理器)
with语句可以自动管理上下文资源,不论程序以什么原因跳出with块,都能确保文件正确的关闭,以此来达到释放资源的目的(防止忘了关闭资源)。
语法规则
with语句的语法规则如下图所示,其中上下文管理器可以这样理解:若一个类对象实现了特殊方法__enter__(),__exit__(),则称该类对象遵守了上下文管理协议,该类对象的实例对象就称为上下文管理器。
open(‘logo.png’,‘rb’)返回的的对象就是上下文管理器,同时创建一个运行时上下文,去自动调用__enter__()方法,并将返回值赋给src_file。之后无论以何种方式离开运行时上下文(也就是跳出with语句体)都会自动调用上下文管理器的特殊方法__exit__()以释放资源。

有了with语句,我们只需三行代码就能实现文件的复制:
with open('logo.png','rb') as src_file:
with open('copylogo.png','wb') as target_file:
target_file.write(src_file.read())
os模块
1、os模块是Python内置的与操作系统功能和文件系统相关的模块,该模块中的语句的执行结果通常与操作系统有关,在不同的操作系统上运行,得到的结果可能不一样。
2、可以用os模块打开系统应用或可执行文件。
#打开系统应用或可执行文件
import os
#打开系统应用
os.system('notepad.exe') #打开记事本
os.system('calc.exe') #打开计算器
#直接调用可执行文件
os.startfile('可执行文件的绝对地址') #打开可执行文件
3、可以用os模块与os.path对目录或文件进行操作。
- os模块的常用函数
| 函数 | 说明 |
|---|---|
| getcwd() | 返回当前的工作目录 |
| listdir(path) | 返回指定路径下的文件和目录信息 |
| mkdir(path[, mode]) | 创建目录 |
| makedirs(path1/path2…[, mode]) | 创建多级目录 |
| rmdir(path) | 删除目录 |
| removedirs(path1/path2…) | 删除多级目录 |
| chdir(path) | 将path设置为当前工作目录 |
| walk(path) | 返回当前目录及其子目录(包括子目录的子目录的子目录…)的所有文件 |
#os.walk代码实例
import os
path = os.getcwd()
lst_files = os.walk(path)
for dirpath,dirname,filename in lst_files:
'''print(dirpath)
print(dirname)
print(filename)'''
for dir in dirname:
print(os.path.join(dirpath,dir))
for file in filename:
print(os.path.join(dirpath,dir))
print('————————————————————————————————————')
- os.path模块的常用函数
| 函数 | 说明 |
|---|---|
| abspath(path) | 用于获取文件或目录的绝对路径 |
| exists(path) | 用于判断文件或目录是否存在,如果存在返回True,否则返回False |
| join(path, name) | 将目录与目录或者文件名拼接起来 |
| split() | 分离目录名和文件名 |
| splitext() | 分离文件名和扩展名 |
| basename(path) | 从一个目录中提取文件名 |
| dirname(path) | 从一个路径中提取文件路径,不包括文件名 |
| isdir(path) | 用于判断是否为路径 |
本文详细介绍了Python中字符编码与文件操作的关系,包括GBK和UTF-8的区别,文件的读写模式,如'r'、'w'、'a'、'b'等,以及文件对象的方法如read()、write()、seek()等。还提到了使用with语句进行文件操作的优势,以及os模块在文件和目录操作中的作用,如os.system()、os.listdir()等。
1139

被折叠的 条评论
为什么被折叠?



