1、文件(file)
通过python来对计算机中的各种文件进行增删改查的操作
IO(Input、Output)
1.1 文件打开
文件操作步骤
1)打开文件
2)对文件进行各种操作(读写)
3)关闭
open(file, mode=‘r’, buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
使用open()函数打开一个文件
参数:
file 要打开文件的名字(路径)
如果当前文件和目标文件在同一目录下,则可以直接打开
file_name = 'G:/python/foo.txt'
file_obj = open(file_name)
#read()方法来读取文件的内容,他会将昂内容全部保存到一个字符串返回
content = file_obj.read()
print(content)
上面程序读取 foo.txt 内容:
我是foo文件
1.2 关闭文件
1.2.1 with … as 语句 使用完后自动关闭文件
file_name = 'G:/python/foo.txt'
try:
with open(file_name) as file_obj:
#with语句中可以直接使用file_obj来操作文件
#此时这个文件只能在with中使用,一旦with结束文件会自动close()关闭
print(file_obj.read())
except FileNotFoundError:
print(f'{file_name} 文件不存在')
上面程序读取 foo.txt 内容:
我是foo文件
标准的一个操作文件的代码
try:
with open('XXX') as file_obj:
pass
except FileNotFoundError:
pass
1.2.2 close()方法关闭文件
file_name = 'G:/python/foo.txt'
file_obj = open(file_name)
content = file_obj.read()
file_obj.close()
print(content)
建一个demo2.txt文件输入一首诗
白日依山尽
黄河入海流
欲穷千里目
更上一层楼
2、标准的一个操作文件的代码结构
通过read()函数读取文件的内容
调用open()来打开一个文件,可以将文件分成两种类型:
- 一种 是纯文本文件(使用utp-8的编码写的文本文件)
- 二种 是二进制文件(图片、音频、ppt等文件)
open() 这个函数打开文件时,默认是以纯文本文件形式打开的,处理文本文件时,有时候需要指定文件的编码;
- 如果直接调用read()这个函数,它会将文本内容全部读取;
- 如果要读取的内容比较大的情况,会一次性将文件的内容加载到内存中,容易导致内存泄漏;
read()函数可以接收一个size作为参数,该参数用来指定读取字符的数量:
- 默认值是-1.它会读取文件中所有的字符;
- 可以为size指定一个值,这样read()函数会读取指定适量的字符;
- 每次读取都是从上次读取到的位置开始读取;
- 如果字符的数量小于指定的size,则会读取剩余所有的字符;
2.1 标准的一个操作文件的代码结构
file_name = 'demo2.py'
try:
with open(file_name,encoding='utf-8') as file_obj:
content = file_obj.read(7)
# help(file_obj.read)
print(content)
print(len(content))
#定义一个变量,用来保存文件内容
except FileNotFoundError:
print(f'{file_name}文件不存在')
上面程序返回值:
白日依山尽
黄
7
2.2 较大文件的读取
file_name = 'demo2.py'
try:
with open(file_name,encoding='utf-8') as file_obj:
#定义一个变量,用来保存文件内容
file_content = ''
#定义一个变量,指定每次读取字符的大小
c = 2
#创建一个循环读取文件内容
while True:
content = file_obj.read(c)
#设置停止的条件
if not content:
#内容读取完毕,退出循环
break
file_content += content
except FileNotFoundError:
print(f'{file_name}文件不存在')
print(file_content)
3、其它读取方式
3.1 readline() 读取一行
file_name = 'demo2.py'
file_content = ''
try:
with open(file_name, encoding='utf-8') as file_obj:
print(file_obj.readline(), end='')
print(file_obj.readline(), end='')
except FileNotFoundError:
print(f'{file_name}文件不存在')
上面程序返回值:
白日依山尽
黄河入海流
3.2 readlines()
readlines()该方法也是用于一次读取一行的读取内容,它会将读取到的内容封装到列表中返回
file_name = 'demo2.py'
file_content = ''
try:
with open(file_name, encoding='utf-8') as file_obj:
file_content = file_obj.readlines()
print(file_content)
except FileNotFoundError:
print(f'{file_name}文件不存在')
上面程序返回值:
[‘白日依山尽\n’, ‘黄河入海流\n’, ‘欲穷千里目\n’, ‘更上一层楼’]
3.3 for 循环取数据
file_name = 'demo2.py'
file_content = ''
try:
with open(file_name, encoding='utf-8') as file_obj:
#readlines()该方法也是用于一次读取一行的读取内容,它会将读取到的内容封装到列表中返回
file_content = file_obj.readlines()
for i in file_content:
print(i, end='')
except FileNotFoundError:
print(f'{file_name}文件不存在')
4、文件的写入
write()向文件中写入内容x
如果操作的是一个文本文件的时候,write()函数需要我们传递一个字符串作为参数
使用open()函数打开文件时需要指定打开文件所要的操作(读、写、追加)
如果不指定操作类型,默认时以读取文件,而读取文件时不能向文件中去写入的
r 表示只读
w 表示可以写,我们使用w来写入文件,如果文件不存在,则会创建文件,如果不存在则会覆盖文件内容
a 表示追加内容,如果文件不存在会创建文件,如果文件存在,则会向文件中追加内容
- 为操作符增加功能
r+ 既可读又可写,文件不会报错
x 用来创建文件,如果文件不存在,则创建文件,如果存在就报错
file_name = 'demo2.py'
file_content = ''
try:
with open(file_name,'w',encoding='utf-8') as file_obj:
file_obj.write('aaaaaaaaaaaaaaaaa\n')
file_obj.write('bbbbbbbbbbbbbbbb\n')
#不能写入数字
file_obj.write(456)
except FileNotFoundError:
print(f'{file_name}文件不存在')
file_obj.write(456) 代码报错:
TypeError: write() argument must be str, not int
5、二进制文件的读取
所有文本文件以外的文件都是二进制文件
读取模式
t 读取文本文件(默认值)
b 读取二进制文件
file_name = r'G:/FastStone Capture/20200107_151157.png'
file_content = ''
try:
# with open(file_name,'r',encoding='utf-8') as file_obj:
with open(file_name,'rb') as file_obj:
#读取文本文件时,size时以字符为单位
#读取二进制文件时,size是以字节为单位
#将读取的内容写出来
#定义一个新的文件
new_name = 'abc.png'
# file_content = file_obj.read(100)
# print(file_content)
with open(new_name,'wb') as new_obj:
#定义每次读取的大小
c = 1024 * 100
while True:
#从已有的对象中读取数据
file_content = file_obj.read(c)
if not file_content:
break
#将读取的数据写入新的对象当中
new_obj.write(file_content)
except FileNotFoundError:
print(f'{file_name}文件不存在')
新生成的abc.png 文件
6、读取文件的位置
tell() 方法用来检查当前读取的位置
seek() 可以修改当前读取的位置
参数:0从头开始默认;1从当前位置;2从最后位置
中文一个汉字占用3个位置seek设置的时候应该时3的倍数
with open('demo2.py', 'r', encoding='utf-8') as file_obj:
file_obj.seek(17)
print(file_obj.read())
# 中文一个汉字占用3个位置seek设置的时候应该时3的倍数
print('当前读取了-->', file_obj.tell())
黄河入海流
欲穷千里目
更上一层楼
当前读取了–> 70
7、文件的其他操作
os.getwd() 获取当前所在的目录
切换盘符
import os
#获取当前目录下文件列表
r = os.listdir('..')
# 切换盘符
os.chdir('c:/')
# os.getwd() 获取当前所在的目录
r = os.getcwd()
print(r)
# 创建目录
os.mkdir('abd')
#删除目录
os.rmdir('abd')
上面程序返回:
c:\