ctrl + 左键点击 进入模块
1.文件打开
文件(file)
通过Python程序来对计算机中的各种文件进行增删改查的操作 --- I/O(Input/Output)
操作文件
1.打开文件
2.操作文件(读,写),保存
3.关闭文件
open(file)
file 要打开的文件
file_name = 'demo.txt'
file_obj = open(file_name)
print(file_obj) #<_io.textiowrapper name="demo.txt" mode="r" encoding="cp936">
这种方式只能打开当前目录下的文件,如果文件在别的目录下打开就会报错
如果访问的文件不在当前目录下,只需把文件的目录copy然后复制过来即可,前面加r
file_name =r'D:\py_Project\基础\15\demo.txt'
file_obj = open(file_name)
print(file_obj) #<_io.textiowrapper name="D:\\py_Project\\基础\\15\\demo.txt" mode="r" encoding="cp936">
---------------------------------------------------------------------------看完3.关闭文件后看------------------------------------------------------------------------------
打开文件不指定操作默认是读取文件
如果有其他操作,应该在打开文件时就制定你要进行的操作
如我想向文件中写入
with open(file_name,'w',encoding='utf-8') as file_obj:
2.读取内容
2.1read() 读取文件内容,把读取内容以字符串的方式返回
demo2.txt中的内容:
清明时节雨纷纷,
路上行人欲断魂。
借问酒家何处有,
牧童遥指杏花村。
file_name = 'demo.txt'
file_obj = open(file_name)
content = file_obj.read()
print(content) # asdasdasdasdasdasd
文件读取编码格式错误:
file_name = 'demo2.txt'
try:
with open(file_name) as file_obj:
content = file_obj.read()
print(content)
except FileNotFoundError:
print(f'{file_name}不存在')
# UnicodeDecodeError: 'gbk' codec can't decode byte 0x89 in position 67: illegal multibyte sequence
调用open()来打开一个文件的时候 ,可以将文件分为两种类型
第一种 是纯文本(使用utf-8等编写的文本)
第二种 是二进制文件(音频,视频,图片......)
open()函数它默认打开文件是以纯文本的形式来打开文件
2.2更换编码格式enconding =
英文的纯文本是可以解析的,而中文的不能,所以我们指定一个适合中文的编码格式
file_name = 'demo2.txt'
try:
with open(file_name,encoding='utf-8') as file_obj:
content = file_obj.read()
print(content)
except FileNotFoundError:
print(f'{file_name}不存在')
输出:
清明时节雨纷纷,
路上行人欲断魂。
借问酒家何处有,
牧童遥指杏花村。
2.3 较大文件的读取方法
read()来读取内容的时候
它会直接将全部内容读取出来,如果尧都区的内容比较大,会一次性加载到内存当中,这个时候就容易导致内存溢出
read()可以接收一个size作为参数,该参数用来指定取字符的数量
默认值为-1 读取全部内容
可以为size指定一个值,这样我们会读取指定数量的字符
每一次读取的位置都是从上一次读取的位置接着读取
如果设置的这个size大于剩余字符的数量,它会一下把剩余的部分读取
file_name = 'demo2.txt'
try:
with open(file_name,encoding='utf-8') as file_obj:
# help(file_obj.read)
content = file_obj.read(9)
print(content)
except FileNotFoundError:
print(f'{file_name}不存在')
# 清明时节雨纷纷,
file_name = 'demo2.txt'
try:
with open(file_name,encoding='utf-8') as file_obj:
# help(file_obj.read)
content = file_obj.read(9)
content = file_obj.read(9)
content = file_obj.read(9)
content = file_obj.read(9)
print(content)
print(len(content))
except FileNotFoundError:
print(f'{file_name}不存在')
# 牧童遥指杏花村。
# 8
循环读取,设定size
file_name = 'demo2.txt'
try:
with open(file_name,encoding='utf-8') as file_obj:
# 定义一个变量,来指定每次读取字符的数量(每次读100歌字符)
chunk = 100
# 创建一个循环来读取文件内容
while True:
content = file_obj.read(chunk)
# 退出循环
if not content:
# 内容读完了,结束循环
break
print(content,end='')
except FileNotFoundError:
print(f'{file_name}不存在')
输出:(文字有点少体现不出来 ,反正是这个意思)
清明时节雨纷纷,
路上行人欲断魂。
借问酒家何处有,
牧童遥指杏花村。
2.4其他的读取方式
readline()读取一行内容
file_name = 'demo2.txt'
with open(file_name,encoding='utf-8') as file_obj:
# file_obj.readline()该方法读取一行的内容
print(file_obj.readline(),end='')
print(file_obj.readline(),end='')
输出:
清明时节雨纷纷,
路上行人欲断魂。
readlines()将读取内容放到一个列表中返回 (多了一个s)
file_name = 'demo2.txt'
with open(file_name,encoding='utf-8') as file_obj:
# file_obj.readline()该方法读取一行的内容
r = file_obj.readlines()
print(r) #['清明时节雨纷纷,\n', '路上行人欲断魂。\n', '借问酒家何处有,\n', '牧童遥指杏花村。']
3.关闭文件 close()
file_name = 'demo.txt'
file_obj = open(file_name)
content = file_obj.read()
print(content) # asdasdasdasdasdasd
# 关闭文件
file_obj.close() # 关闭文件
file_obj.read() # 文件关闭了就不能读取了,所以出现异常
with...as语句:
file_name = 'demo.txt'
with open(file_name) as file_obj:
print(file_obj.read()) # asdasdasdasdasdasd
一旦with.....as 语句结束文件自动关闭
file_name = 'asd.txt'
try:
with open(file_name) as file_obj:
print(file_obj.read())
except FileNotFoundError:
print(f'{file_name}不存在') # asd.txt不存在
4.文件的写入
4.1 write()向文件中写内容 open()中要写入参数'w'
file_name = 'demo2.txt'
with open(file_name,'w',encoding='utf-8') as file_obj:
#write()来向文件中写内容
file_obj.write('haohaoxuexi')
w表示可写的,如果文件不存在,他会帮我们来创建一个文件,并写入内容。
如果文件存在,则会覆盖原文件内容
必须写入字符串
file_name = 'demo2.txt'
with open(file_name,'w',encoding='utf-8') as file_obj:
#write()来向文件中写内容
file_obj.write('haohaoxuexi')
file_obj.write('hasd')
file_obj.write('h123')
write()是有返回值的,返回值是写入字符的个数
file_name = 'demo2.txt'
with open(file_name,'w',encoding='utf-8') as file_obj:
#write()来向文件中写内容
r = file_obj.write(str(123)+'\n')
print(r) # 4
a表示追加内容
file_name = 'demo2.txt'
with open(file_name,'a',encoding='utf-8') as file_obj:
#write()来向文件中写内容
file_obj.write('haohaoxuexi')
file_obj.write('hasd')
file_obj.write('h123\n')
运行了四次程序 demo2.txt中如下:
x用来新建文件,如果文件不存在就创建文件,文件存在就报错
5.操作二进制文件
b 二进制
读取一个mp3文件
file_name = r'C:\Users\xxx\Desktop\Tule,Chris Linton - Fearless Pt. II.mp3'
with open(file_name,'rb') as file_obj:
print(file_obj.read(40))
#b'ID3\x03\x00\x00\x00\x0bx\x00TPE1\x00\x00\x00\x13\x00\x00\x00Tule/Chris Linton\x00T'