- 文件,就是存储在某种长期储存设备上的一段
数据
,长期存储设备包括:硬盘、U 盘、移动硬盘、光盘等- 在计算机中,文件是以
二进制
的方式保存在磁盘上的- 文本文件,可以使用文本编辑软件查看,本质上还是二进制文件,例如,python的源程序
- 二进制文件,保存的内容不是给人直接阅读的,而是提供给其他软件使用的,例如,图片文件、音频文件、视频文件等,二进制文件不能使用文本编辑软件查看
文件操作
在计算机中
操作文件
通常使用三个步骤:
- 打开文件
- 处理文件
- 关闭文件
方法 | 功能 |
---|---|
open(file, mode='r') |
获得文件对象,通过文件对象操作文件 |
fileObject.read([size]) |
从文件中读取size 个字节的数据,默认读取所有数据 |
fileObject.write(str) |
将字符串 写入文件,返回实际写入的字符个数 |
fileObject.close() |
将数据写入磁盘,并释放资源 |
fileObject.flush() |
直接把内部缓冲区的数据立刻写入文件 |
- 文件打开方式
open
方法默认以只读方式
打开文件,并且返回文件对象
改变打开方式,使用f = open("文件名", "打开方式")
打开方式 | 功能 | 若文件不存在 | 是否覆盖 |
---|---|---|---|
r | 只能读 | 报错 | - |
r+ | 可读可写 | 报错 | 是 |
w | 只能写 | 创建文件 | 是 |
w+ | 可读可写 | 创建文件 | 是 |
a | 只能写 | 创建文件 | 否,追加写 |
a+ | 可读可写 | 创建文件 | 否,追加写 |
- 按字节读取文件
read()
方法一次性读入所有的文件数据read(size)
方法读入size
个字节的数据
file = open("readme.txt")
text = file.read()
print(text)
file.close()
- 按行读取文件内容
readline
方法可以一次读取一行内容- 方法执行后,会把
文件指针
移动到下一行,准备再次读取
file = open("readme.txt")
while True:
text = file.readline() # 读取一行内容
if not text: # 判断是否读到内容
break
print(text, end="") # 每读取一行的末尾已经有了一个 `\n`
file.close()
- 读文件最佳实践
read()
一次性读取最方便- 如果不能确定文件大小,反复调用
read(size)
比较保险- 如果是配置文件,调用
readlines()
最方便
- 写入文件
write
方法用于向文件中写入指定字符串- 在文件关闭前或缓冲区刷新前,字符串内容存储在缓冲区中,这时你在文件中是看不到写入的内容的。
- 如果打开方式带
b
,字符串要用encode
方法转为bytes
形式,否则报错:TypeError: a bytes-like object is required, not 'str'
f = open("readme.txt", "w")
f.write("hello python!\n")
f.write("今天天气真好")
f.close()
实例演示:文件复制
- 小文件复制
file_read = open("source.txt")
file_write = open("target.txt", "w")
text = file_read.read()
file_write.write(text)
file_write.close()
file_read.close()
- 大文件复制
file_read = open("source.txt")
file_write = open("target.txt", "w")
while True:
text = file_read.readline() # 如果是二进制文件,建议使用read(size)方法
if not text:
break
file_write.write(text)
file_write.close()
file_read.close()
文件操作中的异常处理
由于文件读写时都有可能产生
IOError
,一旦出错,后面的f.close()
就不会调用。所以,为了保证无论是否出错都能正确地关闭文件,我们可以使用try ... finally
来实现
try:
f = open('/path/to/file', 'r') # 当open出现异常时,f 不会被创建
print(f.read())
finally:
if f:
f.close()
但是每次都这么写实在太繁琐,所以,Python引入了
with
语句来自动帮我们调用close()
方法
with open('/path/to/file', 'r') as f:
print(f.read())
这和
try ... finally
相同,但代码更简洁,并且不必调用f.close()
方法
文件/目录的常用管理操作
- 在
终端
中通过使命可以完成创建文件、文件重命名、删除文件、改变路径、查看目录内容等操作- 同样,在Python中通过程序也可以实现上述功能,但需要导入
os
模块
import os
print(os.name)
nt
posix
代表Linux、Unix、Mac OS X系统,nt
代表Windows系统
- 常用文件操作
方法名 | 说明 | 示例 |
---|---|---|
rename | 重命名文件 | os.rename(源文件名, 目标文件名) |
remove | 删除文件 | os.remove(文件名) |
- 常用目录操作
方法名 | 说明 | 示例 |
---|---|---|
listdir | 目录列表 | os.listdir(目录名) |
mkdir | 创建目录 | os.mkdir(目录名) |
rmdir | 删除目录 | os.rmdir(目录名) |
getcwd | 获取当前目录 | os.getcwd() |
chdir | 修改工作目录 | os.chdir(目标目录) |
path.isdir | 判断是否是文件 | os.path.isdir(文件路径) |
- end -