python基础(9):文件

本文详细介绍了Python中文件操作的基本概念,包括文件类型(文本和二进制)、文件打开方式、使用open()函数及各种模式,以及read(),readlines(),readline()和write(),writelines()等方法的使用。同时强调了文件路径、编码选择和正确关闭文件的重要性。
摘要由CSDN通过智能技术生成

目录

一.文件概述

二.打开文件 

三.关闭文件(with关键字)

四.读文件

4.1 read()方法

4.2 readlines()方法

4.3 readline()方法

五.写文件  

5.1 write()方法

5.2 writelines()方法


一.文件概述

依据数据的组织形式,文件可以分为两种类型:文本文件和二进制文件。

文本文件一般由特定的单一编码的字符组成,可通过文本编辑器进行创建,阅读和编辑。如txt文件,.py文件,hlmt文件。

二进制文件由比特0和比特1组成,以字节为单位的二进制数,二进制文件没有统一的字符编码。常见的形式有:“.png”为扩展名的图片文件,“.mp3”为扩展名的音频文件,“.mp4”为扩展名的视频文件。

 文件操作的步骤:

打开文件,操作文件(读文件和写文件),关闭文件

二.打开文件 

用open函数打开一个文件,返回一个文件对象

语法格式: open(file,mode = "r",encoding )

file :被打开的文件名(通常为文件路径,和代码在一个文件夹中可为文件名)

mode:文件打开的格式

文件打开的模式
“r”只读模式,文件不存在则返回异常“FileNotFoundError”
"w"覆盖写模式,文件不存在则创建,存在则完全覆盖
"x"创建写,文件不存在则创建,存在则返回异常“FileExistsError”
"a"追加写,文件不存在则创建,存在则在文件后面追加内容
"rt","wt","xt","at"文本模式,默认值
"rb","wb","xb","ab"二进制文件读写
"+",如 “r+”,“rb+”与r/w/x/a/rb/...一起使用,在原功能上增加读写功能

encoding:Windows操作系统默认中文编码是“GBK”,如果文件中存在中文需要读取,则需使用编码"utf - 8",即encoding=“utf-8-sig”

f = open("hello.txt","r",encoding="utf-8-sig")
print(f)

运行结果:

用open函数打开一个文件,返回的是文件对象 

文件的路径:一层一层目录构成的字符串,通过路径来表示某个文件的位置 ,知道了文件的路径,就可以知道文件在硬盘上的详细位置,也就可以进一步知道文件里面都有什么了。

相对路径:文件在硬盘上真正存在的路径,具有唯一性

绝对路径:指以当前所在目录为参考,查找其他文件或者目录的路径(可以理解为不给确切的位置,一点一点往上一级进行查找)

相对路径有关
单点(.)表示当前目录
双点(..)表示返回上一级
/表示分隔目录
../表示返回上一级
../../表示向上返回两级

避免转义字符影响结果

1.采用\\

2.采用/

3.在文件路径前加 “r”

在上面那个例子中,是将我们已知的文本文件和代码放在一起,所以可以直接在file的位置输入文件名称,但如果不在,一般要输入文件的路径。输入文件路径时,要注意转义字符的错误。如下:

f = open("D:\p\pycharm\text\静夜思.txt","r",encoding="utf-8-sig")
print(f)

在以上代码中,我们可以看到有例如 \t 的存在,会报如下错误:

如何解决转义字符的错误,有上文提到的三个办法:

#在转义字符中,\\表示的意思是\
f = open('D:\\p\\pycharm\\text\\静夜思.txt',"r",encoding="utf-8-sig")
print(f)
#采用反斜杠/
f = open('D:/p/pycharm/text/静夜思.txt',"r",encoding="utf-8-sig")
print(f)
#采用r或者R
f = open(R'D:\p\pycharm\text\静夜思.txt',"r",encoding="utf-8-sig")
print(f)

在上面运用到的是绝对路径,准确找到文件位置的路径。 

采用任意一种方法的代码,均能得到如下运行结果。

三.关闭文件(with关键字)

文件在打开以后,使用完一定要关闭。打开文件是在申请一定的系统资源空间。当我们不再使用时,资源应当及时被释放,这就是正所谓“有借有还,再借不难”的道理了。如果我们不采取关闭文件的措施,可能会导致文件资源泄露,进一步导致其他代码无法顺利打开。同时,也应当了解到,一个程序能打开的文件数也是有限的。

#一个程序能打开的文件数是有限的
flist = []
count = 0
while True:
    f = open("hello.txt","r",encoding="utf-8-sig")
    flist.append(f)
    count += 1
    print(count)

 运行结果:

如上,我们可以看出,一个程序能打开的文件数是有限的。当超过可以被打开的限度时,会报错。如果不放到我们上述定义的列表flist中,则不会报错。 

文件关闭就十分重要。

语法格式:文件对象名.close()

f = open("hello.txt","r",encoding="utf-8-sig")
f.close()

 close()方法不一定能保证文件正常关闭,如果程序出现异常导致close()方法没有执行,则文件将不会关闭。 此时,就不得不提到with关键字了。

with关键字语法格式:with open() as f :

采用with关键字后,不需要访问文件后再将其关闭,python会在合适时自动关闭。

#打开一个
with open("hello.txt","r",encoding="utf-8-sig") as f:
#打开两个
with open("hello.txt", "r") as f1,open("hh.txt", "r") as f2:

四.读文件

text文件的内容: 

4.1 read()方法

默认读取全部字符。 

语法格式:f.read()

#默认读取全部内容
with open("text.txt","r",encoding="utf-8-sig") as f:
    print(f.read())

 运行结果:

#读取前6个字符的内容
with open("text.txt","r",encoding="utf-8-sig") as f:
    print(f.read(6))

运行结果:

4.2 readlines()方法

读取所有行,以每一行为元素形成一个列表。 

语法格式:文件对象.readlines()

注意:readlines()一次性读取全部,占大量内存空间。

with open("text.txt","r",encoding="utf-8-sig") as f:
    print(f.readlines())

 运行结果:

当在括号内输入字符数时,数不够也是输入包括的那一行,按行输出,只要包含一个字符,就输出那一行所有文字。如下举例:

with open("text.txt","r",encoding="utf-8-sig") as f:
    print(f.readlines(1))
with open("text.txt","r",encoding="utf-8-sig") as f:
    print(f.readlines(6))
with open("text.txt", "r", encoding="utf-8-sig") as f:
    print(f.readlines(8))

运行结果: 

4.3 readline()方法

 语法格式:文件对象.readline([size])

size参数可以省略,省略则会对文件进行逐行读取,传入则会读取前size长度的字符或字节。

with open("text.txt", "r", encoding="utf-8-sig") as f:
    print(f.readline())

 运行结果:

五.写文件  

5.1 write()方法

语法格式:文件对象. write(s)

s:表示要写入的内容

我们电脑中不存在plan.txt这个文件,使用“w”进行覆盖写 

with open("plan.txt", "w", encoding="utf-8-sig") as f:
    f.write("1.今天要好好学习\n")
    f.write("2.今天要锻炼身体\n")

 运行结果:

 

我们可以在电脑中找到新生成的 plan.txt 文件,并在文件内部生成了我们write里面的内容。

5.2 writelines()方法

 向文件中写入以字符串为元素的列表

语法格式:文件对象.writelines(lines)

list01 = ['111','222','333']
with open("plan.txt", "w", encoding="utf-8-sig") as f:
    f.writelines(list01)

运行结果:

 “w”是覆盖写,清空文件内容然后写入。

列表中各个字符串元素都写入文件中,元素之间无间隔。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值