第七章 Python文件操作

 欢迎您进入老吴的博客,如有联系请加我QQ:2367214814

7.1  初识文件操作:

大家应该听说过一句话:“好记性不如烂笔头”。

不仅人的大脑会遗忘事情,计算机也会如此,比如一个程序在运行过程中用了九牛二虎之力终于计算出了结果,试想一下如果不把这些数据存放起来,相比重启电脑之后,“哭都没地方哭了”可见,在把数据存储起来有做么大的价值。

7.1.1  常见的文件

 

7.1.2 文件的作用

就是把一些数据存放起来,可以让程序下一次执行的时候直接使用,而不必重新制作一份,省时省力。

7.2文件的打开与关闭

想一想:

如果想用word编写一份简历,应该有哪些流程呢?

1、打开word软件,新建一个word文件

2、写入个人简历信息

3、保存文件

4、关闭word软件

同样,在操作文件的整体过程与使用word编写一份简历的过程是很相似的

1、打开文件,或者新建立一个文件

2、读/写数据

3、关闭文件

7.2.1 写文件:

python,使用open函数,可以打开一个已经存在的文件,或者创建一个新文件

#  相对路径-写入文件

open(文件名,访问模式) ;   open里面有两个参数。

示例如下:

先创建一个test.py文件,利用Python代码打开这个文件。

f = open('test.txt', 'w')  open有返回值 找个变量接收 。
# 找个变量保存open的返回值,任何操作通过f操作; "w"--》写文件; ‘rrrrrrrrrr'-》只能读
f.write("hello,大家好")
f.close()   # 关闭文件

 

 

错误分析:当我们打开一个文件,可是中文出现乱码,这是可能因为我们文件使用UTF-8进行编辑,而Windows默认使用GBK编码格式,所以导致打开文件时出现乱码

解决方法一:在打开的文本中解决(治标不治本)。点击图中右下角的UTF-8,选择GBK,在弹出的窗口中选择Reload(重载)

 

 

 

解决方法二:在编辑文本时,设置指定的编码格式。

 

查看结果:

 

访问模式

说明

r

以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。如果文件不存在会崩溃。文件必须存在

w

打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。

a

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

rb

以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。

wb

以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。

ab

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

r+

打开一个文件用于读写。文件指针将会放在文件的开头。

w+

打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。

a+

打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。

rb+

以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。

wb+

以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。

ab+

以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

 

用编辑器编辑的文件是文本文件;图片、视频、MP3等是二进制文件

7.2.2  读文件

相对路径文件:

相对路径就是在同一个文件夹下面。建议工作把文件写在相对路径下面

此时你需要先利用软件创建一个文件,文件里面随便写一些内容,然后保存在任意磁盘(路径尽量要简单一些)中。

然后创建一个py文件,利用Python代码打开这个文件。

 

读取test1文件示例如下:

# 相对路径-读取文件

f=open('test1.txt','r',encoding='utf-8')
data = f.read()
print(data)
# close作用有时候会立马进去 有时间在内容里面  为了防止数据遗落
f.close( )

 

7.2.3  在本地磁盘读取文件:

1. 在本地D盘新建一个 吴sir.txt 文件。

在电脑用户创建txt文件时,默认的都是“ANSI”编码格式。如果需要创建完以后查看。

 

打开txt文件以后继续点击界面工具栏中的“文件”功能。

 

另存为:

 

1.首先电脑用户打开需要修改编码方式的“TXT”文件。

2.打开txt文件以后继续点击界面工具栏中的文件功能。

3.点击文件显示下拉菜单以后。点击下拉菜单中的另存为选项。

4.进入另存为操作界面以后。在下方的编码设置中设置自己需要的编码方式。

5.设置好txt文件编码方式以后点击保存即可完成修改。

绝对路径文件:

 

参考代码:

 

# 用什么编码写的文件 就用什么编码打开文件
# 字符编码在控制面板设置
# 绝对路径:
# 绝对路径定义:从盘符开始的路径,这是一个完整的路径。
f = open(r"D:我是吴sir.txt",mode='r',encoding='utf-8')
# f = open(r"D:我是吴sir.txt",mode='rb')
content = f.read()
print(content)
f.close()

 

7.3写文件扩展:

 

结果:

 

# 写文件   ,没有则会创建文件, 有文件把源文件删除在写
#f = open(r"D:我是吴sir.txt",mode='wb',encoding='utf-8')   # 执行会报错
f = open(r"Wusir.txt",mode='wb')#不用加这个,encoding='utf-8',因为是二进制形式  不用编码了   是byte类型

f.write("技术改变命运".encode('utf-8'))  #wb 是bytes类型  把str 转换成bytes类型 用encode

f.close()

 

 

 

追加:

 

结果:

 

# 追加  a
f = open("Wusir.txt",mode='a',encoding='utf-8')
f.write('匠心精神')
f.close()

 

7.3.1 只读文件:

 

参考代码:

# 只读
f = open("Wusir.txt",mode='r+',encoding='utf-8')
content = f.read()
f.write('不用r+则会报错')
f.close()
#  报错原因因为r是只读的
# r+ 模式
# 读写功能  #读完文件后追加了内容

 

7.4  文件操作之seek()函数

扩展:seek()函数是Python中操作文件游标移动操作的函数

seek() 方法用于移动文件读取指针到指定位置。

作用:用来移动文件指针

 

语法如下:

文件对象.seek(偏移量,起始位置)

起始位置假设偏移了,也就是说从开头数出来5个我们不读取我们从第六个开始读取

起始位置:

0:文件开头

1:当前位置

2:文件结尾

注意:

“人生苦短”用gbk存是2个字节一个字,用utf-8就是3个字节。

因此以gbk打开时,seek(4) 就把光标切换到了“生”苦。两个字中间。
但如果是utf8,seek(4)会导致,拿到了这个字的一部分字节,打印的话会报错,因为处理剩下的文本时发现用utf8处理不了,因为编码对不上了。少了一个字节。

 

参考代码:

#想知道光标在哪?
f = open("Wusir.txt",mode='r+',encoding='utf-8')
# 中文:一个中文用三个字节表示,所以出错
# 一个字节等于三个字符
f.seek(3)  #seek 是按照字节去定光标的位置  # 英文:一个字母用一个字节表示,所以不会有错误
print(f.tell())    # 告诉你光标的位置
content= f.read()
print(content)
f.close()

 

 

总结:

# 英文:一个字母用一个字节表示
# 中文:一个中文用三个字节表示 

 

 

7.4.1  读数据的区别

read()  : 一次性读取整个文件内容。  read()读取的时候指定读取到什么位置

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

readline():读取每次只读取一行,注意点:readline()读取出来的数据在后面都有一个 内存不够时使用,一般不太用

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

就像read没有参数时一样,readlines可以按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素

 

Wusir.txt文件内容写入:

 

世界已不同,不必再打扰
旅行的意义
清欢
伤心的云
回家的路
忍一忍抗一抗,拼一拼

 

 

 

f = open('Wusir.txt',mode='r',encoding='utf-8')
msg = f.read(3)
msg1 = f.read()
f.close()
print(msg)
print(msg1)

 

结果:

 

 

readline()

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

 

 

f = open('Wusir.txt',mode='r',encoding='utf-8')
msg1 = f.readline()
msg2 = f.readline()
msg3 = f.readline()
f.close()
print(msg1)
print(msg2)
print(msg3)

 

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

 

结果:

 

 

readlines()

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

 

 

f = open('Wusir.txt',mode='r',encoding='utf-8')
print(f.readlines())
f.close()

 

 

7.4.2  打开文件的另一种方式

咱们打开文件都是通过open去打开一个文件,其实Python也给咱们提供了另一种方式:with open() as .... 的形式,那么这种形式有什么好处呢?

 

写入文件:

 

 

with open('Wusir.txt',mode='w',encoding='utf-8') as f1:
    f1.write("人生苦短,我用Python")

 

结果:

 

读取文件:

with open('Wusir.txt',mode='r',encoding='utf-8') as f1:
    # f1.write("人生苦短,我用Python")
    print(f1.read())

原文地址:https://www.cnblogs.com/wusirtpc/p/14440294.html