【Python】文件操作

椰椰椰耶 2024-09-07 10:05:07 阅读 59

文章目录

打开文件关闭文件文件打开的上限

写文件读文件按字符数量读取按行来读取直接读取全部内容

上下文管理器

打开文件

在读写文件前需要先打开文件


用 <code>open 打开一个文件

f = open('d:/MyComputer/text.txt','r')

print(f)

print(type(f))

"""

运行结果

<_io.TextIOWrapper name='d:/My Computer/text.txt' mode='r' encoding='cp936'>code>

<class '_io.TextIOWrapper'>

"""

前面一个参数是指:需要打开哪个文件后面一个参数是指:打开方式

rread,按照读方式打开wwrite,按照写方式打开aappend,按照写方式打开,把内容写到原有文件内容的末尾 open 的返回值是一个文件对象f 相当于是 file 的缩写

文件的内容,是在硬盘上的此处的文件对象,则是内存上的一个变量后续读写文件操作,都是拿着这个文件对象来进行操作的

此处的文件对象就像一个“遥控器”一样,计算机中,也把这样的远程操控的“遥控器”称为“句柄”(handler

关闭文件

文件在打开完之后,使用完之后,一定要关闭!

打开文件,其实是在申请一定的系统资源。不再使用文件的时候,资源就应该及时释放

否则就可能造成文件资源泄露,进一步导致其他部分的代码无法顺利打开文件了

正是因为一个系统的资源是有限的,因此一个程序能打开的文件个数也是有上限的

f.close()

文件打开的上限

# 文件打开的上限

FIle = []

count = 0

while True:

f = open('d:/My Computer/text.txt')

first.append(f)

count += 1

print(f'打开文件的个数:{ count}')

image.png|550

在系统中,可以通过一些设置项,来配置能打开文件的最大数目但无论配置多少,都不是无穷无尽的,所以需要记得及时关闭文件,释放资源这里将文件对象放入数组 <code>File 中,是为了避免产生垃圾回收

垃圾回收(GC)是 Python 的一个重要机制,自动把不用的变量给释放掉如果不将每次打开的文件对象放入 FIle 中,那么前面打开的文件对象就会由于没有使用而被自动释放,最后导致文件在不关闭的情况下可以一直打开

写文件

使用 r 方式打开文件

# 使用 read 方式打开文件,再进行写操作

f = open('d:/My Computer/text.txt','r')

f.write('hello')

f.close()

文件会抛出异常

image.png|532


使用 <code>w 的方式打开文件

# 使用 write 来实现写文件的操作

# 使用 read 方式打开文件,再进行写操作

f = open('d:/My Computer/text.txt','w')

f.write('hello')

f.close()

f = open('d:/My Computer/text.txt','w')

f.write('world')

f.close()

image.png|401

最后所打开的文件中写入了‘ <code>world ’如果使用 w 打开文件之后,会清空原文件中的内容,再进行后续写操作


使用 a 的方式打开文件

# 使用 read 方式打开文件,再进行写操作

f = open('d:/My Computer/text.txt','w')

f.write('hello')

f.close()

f = open('d:/My Computer/text.txt','a')

f.write('world')

f.close()

此时原有内容不变,写入的内容会存在于之前文件内容的末尾(追加写

image.png|392

文件

中文和英文类似,在计算机中,都是使用“数字”来表示字符的。但具体是那个数字对应哪个汉字是有多个版本的,主流的是:

<code>GBKUTF8

在实际开发的时候,就需要保证,文件内容的编码方式和代码中操作文件的编码方式是匹配的,所以需要再打开文件的时候指定编码方式

按字符数量读取

image.png|315

<code># 按字符数量来读取

f = open('d:/My Computer/text.txt','r',encoding='utf8') code>

result = f.read(5)

print(result)

f.close()

"""

运行结果

床前明月光

"""

按行来读取

最简单的方法,就是直接使用 for 循环

# 按行读取

f = open('d:/My Computer/text.txt','r',encoding='utf8') code>

for line in f:

print(f'line = { line}')

f.close()

"""

运行结果

line = 床前明月光

line = 疑是地上霜

line = 举头望明月

line = 低头思故乡

"""

之所以多了空行,是因为本来读取到的文件内容(这一行内容,末尾就带有 \n)此处使用 print 打印,又会自动添加换行的行为可以给 print 再多设定个参数,修改 print 的自动换行行为

# 按行读取

f = open('d:/My Computer/text.txt','r',encoding='utf8') code>

for line in f:

print(f'line = { line}', end = '')

f.close()

"""

运行结果

line = 床前明月光

line = 疑是地上霜

line = 举头望明月

line = 低头思故乡

"""

end 参数就是表示每次打印之后要在末尾加个啥

默认是 \n修改成‘ ’,也就是什么都不加

直接读取全部内容

使用 readlines 的方法,直接把整个文件所有的内容都读出来,并且按照行组织到一个列表中

# 直接读完所有内容,并且按行进行组织

f = open('d:/My Computer/text.txt', 'r', encoding='utf8') code>

lines = f.readlines()

print(lines)

f.close()

"""

运行结果

['床前明月光\n', '疑是地上霜\n', '举头望明月\n', '低头思故乡']

"""

一次全部读完更省时间

上下文管理器

打开文件之后, 是容易忘记关闭的,Python 提供了上下文管理器,来帮助程序猿自动关闭文件

使用 with 语句打开文件当 with 内部的代码块执行完毕后,就会自动调用关闭方法

with open('d:/My Computer/text.txt','r',encoding='utf8') as f:code>

# 进行文件处理的逻辑

上下文管理器起到的效果

with 对应的代码块执行结束后,就会自动执行 fcloseclose 委托给了 with 来执行,就不用担心自己忘记 close



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。