彻底解决python关于各种文件(音乐、视屏等)读写的操作

在之前做爬虫的时候一直没有系统的整理一下,文件的保存。

今有时间,做一个小小的梳理。

1.文件读写操作:

当我们不用使用Python的文件操作前,首先我们要理清我们的思路:先创建一个文件,写入内容,保存关闭,这是我们写入文件的操作。
那么python对文件进行处理过程中需要使用open()这个方法,下面我们就要开始介绍这个方法。

我们首先要知道Python区分了以二进制文本模式打开的文件

在open()方法中最重要的两个参数 file (文件名)        mode(模式)

open()方法的功能 :用于打开一个文件,并返回对象,在使用这个方法后,一定要关闭文件的对象(IO操作一般都是有缓存的,不关闭句柄,文件内容还在缓存)。

在源码中我们可以看到这个方法要传递的所有参数

def open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True)


file:文件的路径 ,os.path.abspath()可以确定路径(必需)
mode: 文件打开的模式。
buffering:设置缓冲
encoding:字符编码
errors: 是一个可选的字符串,它指定如何编码错误,这个参数不应该在二进制模式中使用。通过如果存在编码错误,则引发ValueError异常(缺省的None具有相同的效果),或者将“ignore”传递给ignore错误。(注意忽略编码错误会导致数据丢失。)
newline:用于区别换行符,它只适用于文本模式
closefd:传入的file参数类型

区分二进制与文本,便要看mode的参数

'r'       open for reading (default)
'w'       open for writing, truncating the file first
'x'       create a new file and open it for writing
'a'       open for writing, appending to the end of the file if it exists
'b'       binary mode
't'       text mode (default)
'+'       open a disk file for updating (reading and writing)
'U'       universal newline mode (deprecated)

当然单一的使用这些参数,是完不成我们想要的操作,看一下组合的意思

'r+'            打开一个文件用于读写,文件指针将会放在文件的开头
'rb'            以二进制格式打开一个文件只读。文件指针放在文件的开头
'rb+'           以二进制格式打开一个文件用于读写,文件指针将会放在文件的开头
'w+'            打开一个文件用于读写。
'wb'            以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件,在数据库操作中要慎用w相关的操作
'wb+'           以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
'a+'            打开一个文件用于读写。
'ab'            以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
'ab+'           以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。          

模式创建完成之后,我们就开始对file这个对象进行操作。

下面看下关于文件对象常用的方法:

在对这个文件进行操作时我们可以首先判断下,这个文件能不能进行读和写

f = open('美文.txt')
print(f.writeable()) #检测这个文件是否可以写入
print(f.readable())  #检测这个文件是否可以读

#在我们遇到 (.*?)able() 这类方法时基本上就是判断能不能执行的功能。

测试完之后,我们可以使用 print函数的内置方法,将要打印的内容,传到文件句柄中进行打印。这样也是一种写入的方法。

f = open('美文.txt','w')
print('hello world',file='f')
f.close()
f = open('美文.txt','a')
f.write('hello world \nhello world \nhello world')     #将字符串写入文件,写入操作
f.close()
f = open('美文.txt','r')                               #读取操作

-------------------------->
print(f.read(100))                                     #从文件读取指定的字节数,如果未给定或为负则读取所有。
-------------------------->
print(f.readline())                                    #读取文件的第一行数据,包括 "\n" 字符
-------------------------->
print(f.readline(3))                                   #读取一行指定的字节数。
-------------------------->
print(f.readlines())                                   #读取所有行并返回列表,若给定sizeint>0,返回总和大约为sizeint字节的行, 实际读取值可能比 sizeint 较大, 因为需要填充缓冲区。

f.close()

-------------------------->
hello world 
hello world 
hello world
-------------------------->
hello world 
-------------------------->
hel
-------------------------->
['hello world \n', 'hello world \n', 'hello world']

上面是关于文件的操作,下面几个实例,关于的是图片、音乐和视屏,这些数据都是由二进制文件。话不多少上代码

2.图片的下载:

import requests
img_data = requests.get('https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1582812072288&di=e224270da441f72559c487ad90b15442&imgtype=0&src=http%3A%2F%2Fb-ssl.duitang.com%2Fuploads%2Fitem%2F201803%2F18%2F20180318210814_fhceh.jpg')
content = img_data.content
print(content)
new_img = open('点赞.jpg','wb')
new_img.write(content)
new_img.close()

3.音乐的重新保存:

music = open('D:/CloudMusic/棉子 - 勇气.ncm','rb')
music_data = music.read()

new_music = open('勇气.ncm','wb')
new_music.write(music_data)
new_music.close()

4.视屏下载保存:

import requests
data = requests.get('https://vdept.bdstatic.com/62637150477a6b646432457a384e3938/5575365071497747/fd6bc7e486462424fe27f67126794674a41da7e564332979bf2270458bb48bb62e5df1671132e68472d1428f0292201a.mp4?auth_key=1582801995-0-0-2dfa9e3c1ef90ddf91dc9b208f3a2507')
content = data.content
print(content)
video = open('demo.mp4','wb')
video.write(content)
video.close()


今天就到这了。

see you again !!!

发布了60 篇原创文章 · 获赞 39 · 访问量 3756

猜你喜欢

转载自blog.csdn.net/qq_42992704/article/details/104540698
今日推荐