编码格式
- Python的解释器使用的编码格式是
Unicode
(内存) .py
文件在磁盘上使用UTF-8
存储(外存)
UTF-8
是Unicode
的实现。
不同编码格式,文件占用空间不同。
文件读写的原理
- 文件的读写俗称"IO操作"(input-output)
- 文件读写操作的流程
文件的读取操作
内置函数open()
创建文件对象
语法规则:file = open(filename [, mode, encoding])
file
:被创建的文件对象open
:创建文件对象的函数filename
:创建/打开的文件名称mode
:打开文件的模式,默认为只读encoding
:编码格式;默认文本文件中字符的编码格式为gbk
示例:
- 创建test.txt文件,文件编码格式为GBK
-
创建demo.py文件,写入代码并运行
file = open('test.txt', 'r') # r表示只读 print(file.readlines()) # ['明月几时有\n', '把酒问青天'];返回列表 file.close()
常见的文件类型
按照文件中数据的组织形式,文件分为两大类:
- 文本文件:存储的是普通“字符”文本,默认为Unicode字符集,可用记事本打开
- 二进制文件:把数据内容用“字节”进行存储,无法用记事本打开,必须使用专门的软件,例如:mp3音频文件、jpg图片、doc文档等。
常见的文件打开模式
打开模式 | 描述 |
---|---|
r |
只读模式;文件指针放在文件开头 |
w |
只写模式;文件不存在则创建;文件存在则覆盖原有内容;文件指针放在文件开头 |
a |
追加模式;文件不存在则创建,文件指针放在文件开头;文件存在则在文件末尾追加内容,文件指针放在原文件末尾 |
b |
二进制方式;不能单独使用,需要与其他模式一起使用,rb或wb |
+ |
读写方式;不能单独使用,需要与其他模式一起使用,a+ |
代码示例(复制图片文件):
src_img = open('lbx.png', 'rb')
target_img = open('lbx_copy.png', 'wb')
target_img.write(src_img.read())
target_img.close()
src_img.close()
文件对象的常用方法
方法 | 说明 |
---|---|
read([size]) |
从文件中读取size个字节或字符的内容返回。若省略size ,则读取到文件的末尾,返回全部文件内容 |
readline() |
从文本文件中读取一行内容 |
readlines() |
把文本文件中每一行都作为独立的字符串对象,将这些对象放入列表返回 |
write(str) |
将字符串str 内容写入文件 |
writelines(str_list) |
将字符串列表str_list 内容写入文件,不添加换行符 |
seek(offset[, whence]) |
把文件指针移动到新位置,offset表示相对于whence的位置;offset为正往结束方向移动,为负则往开始方向移动。 whence不同值有不同的含义: 0:从文件头开始计算(默认值) 1:从当前位置开始计算 2:从文件尾开始计算 |
tell() |
返回文件指针当前的位置 |
flush() |
把缓冲区的内容写入文件,但不关闭文件 |
close() |
把缓冲区的内容写入文件,之后关闭文件,释放文件对象相关资源 |
with语句
自动管理上下文资源,不管什么原因跳出with代码块,都能确保文件正确的关闭,以达到释放资源的目的。省去手动关闭的过程。异常发生时也能自动关闭资源。
当一个类能够实现(enter和exit)功能的时,称这个类符合(上下文管理)协议,并且称这个类的实例对象为(上下文管理器)
with open('test.txt', 'r') as file:
print(file.readlines()) # ['明月几时有\n', '把酒问青天']
目录操作
os模块是Python内置的与操作系统功能和文件系统相关的模块,该模块的语句执行结果通常与操作系统相关,在不同操作系统运行,得到的结果可能不一样。
os模块与os.path模块用于对文件、目录进行操作。
import os
os.system('calc.exe') # 调用系统程序
os.startfile('D:\Program Files (x86)\Tencent\WeChat\WeChat.exe') # 调用可执行文件
os模块操作目录的相关函数
函数 | 说明 |
---|---|
getcwd() |
返回当前工作目录 |
listdir(path) |
返回指定路径下的文件和目录信息 |
mkdir(path[,mode]) |
创建目录 |
makedirs(path1/path2...[,mode]) |
创建多级目录 |
rmdir(path) |
删除目录 |
removedirs(path1/path2...) |
删除多级目录 |
chdir(path) |
将path设置为当前工作目录 |
os.path模块操作目录的相关函数
函数 | 说明 |
---|---|
abspath(path) |
获取文件或目录的绝对路径 |
exists(path) |
判断文件或目录是否存在,返回True/False |
join(path,name) |
将目录与目录或文件名拼接起来 |
splitext() |
分离文件名和扩展名 |
basename(path) |
从一个路径中提取文件名 |
dirname(path) |
从一个路径中提取文件路径,不包括文件名 |
isdir(path) |
用于判断path是否为路径 |
Python中关于路径的知识:
我们常用
/
来表示相对路径,\
来表示绝对路径,例如:/data/bbb.txt
表示相对路径;D:\user\ccc.txt
则表示绝对路径。
注:网页网址和linux、unix系统下一般都用/
我们经常见到形如./path
或../path
的路径,其中的一个.
表示当前所处的文件夹的绝对路径;..
表示当前所处的文件夹上一级文件夹的绝对路径。
示例:打印出当前目录下的所有Python文件
import os
path = os.getcwd()
lst = os.listdir(path)
for fileName in lst:
if fileName.endswith('.py'):
print(fileName)
示例:遍历指定目录下所有文件
import os
path = os.getcwd()
lst = os.walk(path)
for dirpath, dirname, filename in lst:
print(dirname, dirpath, filename)
print('--------------')
# 遍历所有文件夹
for dirItem in dirname:
print(os.path.join(dirpath, dirItem))
# 遍历所有文件
for file in filename:
print(os.path.join(dirpath, file))
print('--------------')
运行结果:
['sub1'] D:\study\python-study\chap11 ['file_read_demo.py', 'lbx.png', 'lbx_copy.png', 'test.txt', '__init__.py']
--------------
D:\study\python-study\chap11\sub1
D:\study\python-study\chap11\file_read_demo.py
D:\study\python-study\chap11\lbx.png
D:\study\python-study\chap11\lbx_copy.png
D:\study\python-study\chap11\test.txt
D:\study\python-study\chap11\__init__.py
--------------
[] D:\study\python-study\chap11\sub1 ['__init__.py']
--------------
D:\study\python-study\chap11\sub1\__init__.py
--------------
相关文章
暂无评论...