b是python文件二进制打开,Python核心编程16 ----- 文件的打开(读取),修改,关闭,二进制...

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">

1f6d91119f3d44c17db1b6ff864f6331.png

这种方式只能打开当前目录下的文件,如果文件在别的目录下打开就会报错

7e579042adeb9d89f25ef3dfaacd6358.png

如果访问的文件不在当前目录下,只需把文件的目录copy然后复制过来即可,前面加r

28d8dd3f86855e61d859825dd7e48916.png

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() # 文件关闭了就不能读取了,所以出现异常

f9aeeef5a46ffbcbb58db5038d8669ee.png

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')

7460bf483abc55a9910efa68c13cf305.png

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')

e0321f8d0333e4a6c4ab2696da8babe1.png

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中如下:

c471541a536a6ce287c855d866345a65.png

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'

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值