python第八天

Posted daoda

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python第八天相关的知识,希望对你有一定的参考价值。

1 文件的初识

#1. 打开文件,得到文件句柄并赋值给一个变量
f=open(‘a.txt‘,‘r‘,encoding=‘utf-8‘) #默认打开模式就为r

#2. 通过句柄对文件进行操作
data=f.read()

#3. 关闭文件
f.close()

错误的处理

 解决方式一: ‘C:Users金鑫Desktop111.txt‘ 凡是路径会发生化学反应的地方,多加一个 这样就是前面对后面的进行转译,告诉计算机这个只是想单纯的表示路径而已。

    解决方式二: r‘C:Users金鑫Desktop111.txt‘ 在路径的整体前面加一个r。(推荐

相对路径与绝对路径:

  1.绝对路径:从磁盘根目录开始一直到文件名

  2.相对路径:用一个文件夹下的文件,相对于当前这个程序所在的文件而言.如果在同一个文件中,则相对路劲就是这个文件名.如果再上一层文件夹则要使用../相对路径下,你就可以直接写文件名即可。

 

2文件的读

r 模式

 以只读方式打开文件,文件的指针将会放在文件的开头。是文件操作最常用的模式,也是默认模式,如果一个文件不设置mode,那么默认使用r模式操作文件。

举例说明:

f = open(‘path1/小娃娃.txt‘,mode=‘r‘,encoding=‘utf-8‘)
msg = f.read()
f.close()
print(msg)

结果:
高圆圆
刘亦菲
张柏芝
杨紫
王菲

通过上面的例子可以看出来,我将小娃娃这个文件的内容全部读取出来了,那么读一个文件还可以怎么读取呢?下面我们研究一下不同的读文件的方法。
 2.1.1 read()
read()将文件中的内容全部读取出来;弊端 如果文件很大就会非常的占用内存,容易导致内存奔溃.
 = open(‘path1/小娃娃.txt‘,mode=‘r‘,encoding=‘utf-8‘)
msg = f.read()
f.close()
print(msg)

结果:
高圆圆
刘亦菲
张柏芝
杨紫
王菲

 2.1.2 read(n)

    read()读取的时候指定读取到什么位置

    在r模式下,n按照字符读取。

f = open(‘path1/小娃娃.txt‘,mode=‘r‘,encoding=‘utf-8‘)
msg = f.read(3)
msg1 = f.read()
f.close()
print(msg)
print(msg1)

结果: 
高圆圆

刘亦菲
张柏芝
杨紫
王菲


 2.1.3 readline()

readline()读取每次只读取一行,注意点:readline()读取出来的数据在后面都有一个

f = open(‘path1/小娃娃.txt‘,mode=‘r‘,encoding=‘utf-8‘)
msg1 = f.readline()
msg2 = f.readline()
msg3 = f.readline()
msg4 = f.readline()
f.close()
print(msg1)
print(msg2)
print(msg3)
print(msg4)

结果:
高圆圆

刘亦菲

张柏芝

杨紫
解决这个问题只需要在我们读取出来的文件后边加一个strip()就OK了

f = open(‘path1/小娃娃.txt‘,mode=‘r‘,encoding=‘utf-8‘)
msg1 = f.readline().strip()
msg2 = f.readline().strip()
msg3 = f.readline().strip()
msg4 = f.readline().strip()
f.close()
print(msg1)
print(msg2)
print(msg3)
print(msg4)

结果:
高圆圆
刘亦菲
张柏芝
杨紫


2.1.4 readlines()

   readlines() 返回一个列表,列表里面每个元素是原文件的每一行,如果文件很大,占内存,容易崩盘。

f = open(‘log‘,encoding=‘utf-8‘)
print(f.readlines())
f.close()
# 结果[‘666666
‘, ‘fkja l;
‘, ‘fdkslfaj
‘, ‘dfsflj
‘, ‘df;asdlf
‘, ‘
‘, ]

    2.1.5 for循环

可以通过for循环去读取,文件句柄是一个迭代器,他的特点就是每次循环只在内存中占一行的数据,非常节省内存。

f = open(‘../path1/弟子规‘,mode=‘r‘,encoding=‘utf-8‘)
for line in f:
    print(line)      #这种方式就是在一行一行的进行读取,它就执行了下边的功能

print(f.readline())
print(f.readline())
print(f.readline())
print(f.readline())
f.close()
  

 rb模式:以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。记住下面讲的也是一样,带b的都是以二进制的格式操作文件,他们主要是操作非文字文件:图片,音频,视频等,并且如果你要是带有b的模式操作文件,那么不用声明编码方式。

3 文件的操作:写

  3.1 w模式

  如果文件不存在,利用w模式操作文件,那么它会先创建文件,然后写入内容.

如果文件存在,利用w模式操作文件,先清空原文件内容,在写入新内容

3.2 wb模式

  wb模式:以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如:图片,音频,视频等。

举例说明:

我先以rb的模式将一个图片的内容以bytes类型全部读取出来,然后在以wb将全部读取出来的数据写入一个新文件,这样我就完成了类似于一个图片复制的流程。

4文件的追加

第三类就是追加,就是在文件中追加内容。这里也有四种文件分类主要四种模式:a,ab,a+,a+b,我们只讲a

4.1 a模式

打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。

  如果文件不存在,利用a模式操作文件,那么它会先创建文件,然后写入内容。

如果文件存在,利用a模式操作文件,那么它会在文件的最后面追加内容。

技术图片

5文件的其他模式:r+

r+: 打开一个文件用于读写。文件指针默认将会放在文件的开头。

注意:如果你在读写模式下,先写后读,那么文件就会出问题,因为默认光标是在文件的最开始,你要是先写,则写入的内容会讲原内容覆盖掉,直到覆盖到你写完的内容,然后在后面开始读取。

 

6文件的其他操作功能

总结:三个大方向:

读:四种模式  r rb r+ t+b

写:四种模式 w wb w+ w+b

追加:四种模式 a a+ ab a+b

相应的功能:对文件句柄的操作:read read(n)  readline()  readlines() write()

tell()获取光标的位置单位是字节

 

f=open(‘E:文件的追加‘,encoding=‘utf-8‘)
print(f.tell())
content=f.read()
print(f.tell())
f.close()


seek 调整光标的位置
f=open(‘E:文件的追加‘,encoding=‘utf-8‘)
print(f.seek(7))
content=f.read()
print(content)
f.close()

 




 

以上是关于python第八天的主要内容,如果未能解决你的问题,请参考以下文章

yyy的python3第八天学习

Python基础 - 第八天 - Socket编程进阶

python设计模式第八天装饰器模式

python第八天

我要偷偷的学Python,然后惊呆所有人(第八天)

我要偷偷的学Python,然后惊呆所有人(第八天)