00:00
好,我们接着往下说啊,还是来说我们这个文件的操作啊,那这个文件操作呢,刚才我们列了这么多是吧,什么r wa,还有加对吧?那实际上除了这些呢,我们还有一种啊,我们再补充一个,我们我在这个位置补充吧,做一个X啊XX什么意思呢?咱们先说一下这东西在哪看啊,还是其实就是在我们这个文档里,Open就是我们这个,诶叫做一个这个内置函数里,它实际上在这会有一个列表是吧?什么r wxa,包括刚才我们列的什么呀,加号对吧?还有什么BT,我们先不管它,但是我们这儿看到了一个什么呀,有一个这个X啊X,那X是来干嘛的呢?诶X其实非常简单,它用来干嘛呢?诶用来新建文件啊,新建文件,什么叫新建文件呢?说如果文件不存在。不存在则创建,诶存在则什么呢?诶则报错啊则报错,所以这X的作用就是用来新建一个文件了,所以现在来看,比如说我们现在这儿,我还是改成DEMO4啊,DEMO4来我把这东西啊,我复制一份,复制一。
01:11
复制一份啊,然后呢,我把这改成X啊改成X,我们来看效果,直接一保存,我们这一执行走一个,现在报错了,为什么告诉你了five error,就是文件已经存在这么一个错误啊,文件已存在,那现在呢,哎,因为这个DEMO4已经有了,所以就报错了,那我这换一个,换一个DEMO5,我们这一保存再一执行,这回是不是就有DEMO5了,诶没有报错,一执行里边东西也写入了啊也写入了,所以这里边我们叫做一个XX叫一个叫应该叫做一个独占创建,就是说它只是什么呀,就是这文件存在的时候,诶不不存在我才创建,存在的时候我就不创建,就是为了避免什么呀,诶覆盖,诶就是说当你需要创建一个什么呀,诶第一次创建一个文件的时候,并且你不想覆盖已有的,这时候就可以用这个X啊X这是我们这么一个操作方式,好,那这块说完了,然后我们接着再往下说啊来我们创建一个文件,创建一个什么呢?我们来一个零九啊零九我们来接着来说文件啊,点一个PY,那这时候。
02:11
就我们还说什么呢,诶那这样啊,我们举个例子,现在呢,我桌面上有这么一个文件啊,有一首这个,诶这个音乐的文件啊f Lac这么一个音乐文件,就一个告白气球是吧?有这么一个文件,那现在假如说我想去读这个文件,那怎么读呢?诶我想去读这个文件,我要怎么读,那我们来试试呗,那首先它在我桌面上对吧,在我桌面上,那我这块就得用我的什么呀,用我的这个。绝对路径对方便了对吧,所以在这我们来一个这个file name,等于那我直接写了C冒号斜杠啊,从根目录下开始写我的这个应该是一个这个users啊,Users,然后是我的这个用户名,然后是我们的这个desktop deskk top desktop,然后鞋盖是不是这个就是我们这个文件名啊,诶文件名告白气球点一个FLC,注意要带扩展名的啊,带扩展名那这个是我们这个文件名,那现在我要读这个文件,其实道理上是一样的,对吧?读它直接来一什么呢?直接来一个我们这个with with来一个什么呢?Open open,我们这直接传一个file name啊file name,那既然我是读,我就显示写什么,哎,读我直接来一个RR2写不写都行啊,写不都行,然后在这我们直接S,我们还是一个Fi obj啊fair obj,那这个就是我们文件,那我想读怎么办呀,那这样我一次性把这文件全都读出来吧,诶直接来一个这个,诶print来什么呢?诶来一个这个file obj点一个这个。
03:36
Read re read直接保存这样吧,这文件挺大的,我这么一读啊,内容会挺多的,我直接来个100啊,读100个,诶直接一执行,那这个时候你发现干嘛了,到这时候就给你报错了,哎,其实你这里边这100不一百啊,写B都无所谓,这一执行一下子干嘛了,就报错了,告诉你什么GBK,什么乱七八糟,反正就就是编码的问题,读不出来啊,读不出来,那这个又是为什么啊,这是为什么?那这里边注意了,我们这里这个文件是一个f Lac这么一个音乐文件,它是一个音乐文件,那注意了,这个音乐文件我们在这儿。
04:15
它能不能直接读啊,那咱们现在说一下,我们说了,我们默认情况下,当我们读一个文件的时候,它是把它当做这个文本文件去读的,对吧,当做文本文件去读的,但是现在我们来说这个文件它是不是文本文件,诶它不是文本文件,那它是什么什么什么文件,注意了,所有的文本文件以外的文件,我们统一称它,为什么呢?二进制文件,那这些就要我们叫什么呀,二进制文件,所以当你要读二进制文件的时候,跟文本文件还有一些区别,那二进制文件要怎么读,在这儿注意了,我们有一个叫做什么呀,Model,诶你看这有两个,一个是B叫做bary model,还有一个T叫做什么呀,Text model,那这里边我们也写一下,哎,我们还有两个读取模式啊,读取模式我们就说这两个了,一个是我们这个T叫什么呢?诶读取我们这个文本文件,还有一什么呢?还有一个叫做B读取我们这个二进制文件啊,读取二进制文件。
05:15
这是两种模式,那注意啊,这个T它是什么呢?送给他三个字叫做默认值,也就说你现在看我这是不是只写了一个R啊,其实跟我写一个RT是一样的啊,跟我写RT是一样的,所以包括我们之前这你这只写那W跟你写WT是其实是一样的啊,其实一样的,所以默认情况下它是一个什么呀,都是去读取这个事儿,文本文件,但是当我们去读取一些非文本文件的时候,我这还能不能用默认值了,哎,就不能了,我这必须得写什么呀?哎,我必须得写一个RB来告诉他我这读的是一个什么呀?诶二进制文件,那这个时候我们再来读这个文件,我们来试一下,这一保存一执行走一个。
06:00
这个文件应该是稍微的有点大了,哎,稍微有点大了,哎呀,刚才我把那个里边那个100啊给它删了,现在他在正在读这个文件,这个文件应该我看看多大多大吧。这个文件应该有23兆,23兆一共有这么多字节啊,这么多字节,那注意了啊,我们这块。卡住了,我先给他终止一下,那这个时候其实也正好看到了我们这么一个问题,当我们去读一个大文件的时候啊,找到我们这个Python。Du LA。Sublime里边的Python,我们先给他。结束掉。稍微等一下,那这个时候你也会发现,当我们去读一个大文件的时候,这文件还不大,就20多兆,而但是我们一次性读取的时候,是不是速度也会很慢呀,诶速度很慢,所以一定要注意,我们在读一个文件的时候,一定不要干嘛呀,诶把这文件一次性的全都读出来,我们要干嘛按照我们之前那种什么呀,诶分块的方式来读取,所以这我直接改一下,我直接来一个READ100,那注意了,读取读取我们这个文本文件时。
07:18
读取我们这个文本文件时。哎,我们这个size呢,哎,Size是以这个什么呀,字符为单位的,哎,字符为单位的,你写一百一百个字符,你写十就十个字符啊,十个字符而什么呢?读取我们这个二进制文件时,我们的什么呢?我们的size字是以我们这个字节为单位的啊,字节为单位的,所以我这写一个100表示我读什么呀?哎,我在这里读100个字节啊,读100个字节在这我们直接一执行走一个,诶那这个就是我们这个f Lac里边这个二进制一个编码,当然它还是用的是这个什么呀,哎,用的这个16进制给我们去表示了啊,用这16进制给我们表示了,就这么一个效果,这二进制文件我们是不是就就读出来了啊,就读出来了啊,所以这里边注意两个问题,第一个读取二进制文件,你是读就RB写就WB,追加就什么呀,就AB就写这么一个就OK了,而我们这个读二进制文件时候,尤其是写较大的时候,你一定要注意,千万不要一次性给它读出来,一次性读的话,它会性能会非常非常的什么呀,诶非常非常的这个差。
08:23
啊,非常非常差,所以这一块一定要注意啊,一定要注意好,那既然这个文件读出来了,同学说老师你这二进能文件这读出来有啥用啊,诶确实没用,二进能文件给你,你你这也是不是看不懂啊,哎,看不懂,所以在这儿呢,我们就可以尝试一件事儿干嘛呢?哎,那既然我这把这文件给它读出来了,我能不能再给他把读出的内容给它写过去啊,哎,给他写过去行不行啊,哎,当然可以啊,那这里边我们就来干嘛呢?哎,我们来将我们这个取到内容,诶将我们这个读取到的这个内容干嘛呢?哎,我们再写出来啊写出来,那这里边我们就。面临一个问题,哎,什么问题啊,诶你这个读取到的内容你要往哪写呀?哎,你要往哪写,所以在这里边我们是不是需要有一个新的文件啊,哎,新的文件所以在这我们来定义一个什么呢?诶定义一个这个新的文件啊,新的文件直接我们来一个new name new name我们叫什么呢?诶我们这样我就把这个文件读到内容干嘛呢?写到我当前目录下啊,写到我当前目录下,那这个文件呢,我就叫做一个诶。
09:28
嗯,叫做一个随便写吧,AA点一个FLVC啊a.FLVC现在就叫这么一个名,那现在我想把这个读到的内容写到这个文件里,那要怎么写,我们来看一下啊,那注意了,写也是一样,我们不要干嘛呀,全都一次性写过去,我们还是分什么呀?诶分块来写啊,分块来写,那好,那在这我们来整一个,呃,我们先来打开这个文件啊,位子我们这儿来一个open open我们这个打开的是我们这个new name啊new name,然后模式呢,我们这应该是一个WB,因为我这要写了啊,写了然后这还是S,我们叫做一个这个,诶诶这块我们叫做一个new obj吧,诶新的一个对象啊new OB比J,然后在这儿我们是不是就可以来写了,哎,来写了,那这个我们需要先去读,然后是不是才能写呀,哎,先切去读,然后才能写,那在这儿我们就定义一个什么呢?诶定义我们这个每次读取的一个大小啊,每次大小还是我们来一个这个C值unk啊创每次。
10:28
都读多少呢?这是一啊,注意单位是字节啊,这是一个字节,然后呢,这个1000,我们说了一个字节,1024个字节是不是等于1K呀?诶1K我们这儿乘以什么呢?我们这样我们就取个取个整吧,我乘以一个100什么意思啊,每次我读100K啊,每次我读100,因为这20多兆,每次读100K,你要每次读一个字节,那太少了,对吧,读读十个字节也太少了,所以我们这每次读取100K啊,读取100K,诶或者你再调整一下也没关系啊,我觉得就是你再乘以一个1024读一,每次读一兆应该也问题不大啊,我们先拿这个100来试试啊,100来试试,好,这是我们定义好的,每次读取大小,那读取大小,我们是不是要把我们读取到内容就开始读,要开始写了,那同样我们读的话,我们用的是一个什么?哎,我们用的是一个这个直接来一个con ten content等于什么呢?等于一个这个fire object,我们这老的对象直接read read谁呀?
11:29
啊read,我们这个创这是在干嘛,这是在从我们这个旧的这个诶已有的这个对象中干嘛呢?诶读取数据啊读取数据然后干嘛,然后要将我们读取到的这个数据干嘛呀?诶数据写入到我们这个诶新对象中啊,写入到我们的新对象中,所以在这儿我们应该调的是一个这个new file啊new obj点一个什么呀,诶right right一个这个什呀,哎,Content。Connt,那这样书就把读到内容给它写过去了,但是这里边有一个关键问题,我们要处理一下,因为我们这个内容我不是一次读的,对吧,不是一次读的,所以这一块我这一套东西我是不是应该写多次啊,哎,写多次,所以这个时候我这应该放一个什么呀,哎,放一个while循环啊while我们还是写一个死循环,然后在这时候就反复去写呀,哎反复去写,那这个时候注意我们什么时候停止啊,什么时候停止,那这个候我们就要做一个判断了,什么时候停止,那如果我没有读取到内容,是不是就停止了,所以在这儿我要做一个判断,If,什么not,这个content,也就是说如果没有读取到我们这个content,哎,如果content有,那这时候就for content没有,那就是一个数,如果没有content了,我就直接什么呀,诶break,那这什么意思,就是说内容。
12:51
内容读取完毕,我们要干嘛呀?哎,我们要终止我们这个循环啊,终止循环在这儿,我们来看一下效果啊,直接一只脚走一个,诶,那这个时候你会发现在我这儿是不是多了一个文件呀?诶AA点一个f Lac,我们来看看这个文件,你看写的还是挺快的啊,打开文件的位置,这是一个24472,这图都过了对吧,应该就没问题了,你可以点开放一下试试。
13:19
是不是就写过来了,哎,就写过来了啊,所以这里边注意我们通过这种方式我们读取啊,他这以这种方式给我打开了,通过我们这种读取二进制文件的方式,是不是就去把我们桌面那个文件写到我们当前目录下了,哎其实这里边没什么可难的,流程也非常非常简单,但是你要知道我们读取二进制文件都是什么呀,诶都要加一个B,读取还是写入都要加一个这个加一个B啊这么一个效果就可以去完成了啊就可以完成了,哎,那这样呢,如果我这咱们可以做个实验是吧,如果我把这WB呢,我换成AB,那什么效果,AB是不是变成追加了,诶追加的话,它是不是会向这个文件里追加呀,但是这里边我们其实追加就没有意义了,因为我们这个已经写过一遍了,往里追加等于再把那歌又写了一遍,对吧,没什么意义,所以这块我们也就不错了啊,但是你要知道这里边你也可以用A来追加,那就是把那个歌内容往里面再追加一遍,一一旦追加以后呢。
14:19
应该它会变成一个之前的一个什么呀,二倍我们来看看。是47.7了,那这时候还能不能播就不一定了,也还能播是吧,但是它的长度并没有改变,那证明其实格式上还有一些地方是不对的,所以在这儿我们也可以用追加啊,也可以用,但是如果你真的想说我想让这歌连着唱两遍,那那个过程会更麻烦一点啊,那个需要判断一下这里边这个内容啊,内容好,那这个是我们说的一个二进制文件的一个操作啊,就是这样一个流程,那以后我们去操作二进制文件的时候,基本上就是么一个这么一个过程,那基本上二进制文件我们是不会去看它内容,就是我们读一个东西,然后给他以各种方式给它写出去,比如想压缩一下,比如说我想给用户提供什么呀,下载,比如说用户给我上传,这时候我去操作少些程西,一般情况下我们是不会去处理里面的内容的,而我们主要做的还是谁呢?还是我们这个文本文件啊,文本文件好,那关于这个问题我们就先说这么多,停一下。
我来说两句