PYTHON学习-文件管理,打工人必备~

🌈write in front🌈
🧸大家好,我是Aileen🧸.希望你看完之后,能对你有所帮助,不足请指正!共同学习交流.
🆔本文由Aileen_0v0🧸 原创 CSDN首发🐒 如需转载还请通知⚠️
📝个人主页:Aileen_0v0🧸—CSDN博客
🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​
📣系列专栏:Aileen_0v0🧸的PYTHON学习系列专栏——CSDN博客
🗼我的格言:"没有罗马,那就自己创造罗马~"

目录

1.什么是文件

2.文件路径

3.打开文件

4.关闭文件

5.写文件

6.读文件

7.上下文管理器


1.什么是文件

内存和硬盘都是计算机的存储设备,但它们的功能和工作原理有所不同。

内存(Memory)是计算机中的临时存储器。它被用来存储正在运行的程序和数据,以及操作系统和应用程序所需要的数据。内存是计算机中最快的存储器,但它的容量相对较小数据保存时间短暂。当计算机关闭或重启时,内存中的数据会被清除。

硬盘(Hard Disk)是计算机中的永久存储器。它被用来保存操作系统、应用程序、用户数据、音频、视频和其他文件。与内存不同,硬盘具有大容量和数据长期保存特性。数据位于硬盘的磁性表面,通过磁头读写

举例来说,当打开电脑上的一款游戏时,游戏程序和所需数据将被加载到内存中。游戏运行时,玩家的进度和状态数据将实时被存储在内存中。当游戏关闭时,这些内存数据将被清除,但在下次运行时可以重新加载。游戏的安装文件、游戏进度数据和其他文件则会被存储在硬盘中。

内存和硬盘之间的关系是密切的,内存和硬盘都是计算机存储系统的组成部分。计算机的运行速度和性能受内存的大小和速度限制,而硬盘的容量和读写速度则影响了数据的存储和读取效率。内存和硬盘的相互配合,保证了计算机正常运行。

2.文件路径

文件路径:指的是一层一层目录构成的字符串,例如:D:\program\qq\QQ.exe

为了表示qq.exe 这个文件的位置,就可以通过路径的方式来表示~~

知道了文件路径,就可以知道文件在硬盘上的详细位置.

也就可以进一步知道文件里的内容~~使用这个文件

文件路径也可以视为是 文件 在硬盘上的身份标识.

每个文件对应的路径都是唯一的!

C:\PyCharm Community Edition 2022.3.2\lib--->目录名之间,用 来分割,使用 也行~

/ :在代码中表示一个文件路径,用 / 更多,使用 \ 不太方便.

\ :在字符串里有特定含义,表示"转义字符".

\\ 在字符串里才表示 字符 \

\ 在字符串里,是特定含义的转义字符~  例如:\n表示换行.

3.打开文件

python 里面有一个打开函数open 打开一个文件~

注:这里的文本文档.txt是我自己在桌面创建的,

     使用\\是因为python中\是转义字符,\\才是真正的 " \ "

open 的返回值, 是一个文件对象~

文件的内容是在硬盘上的.

此处的文件对象,则是内存上的一个变量~

后续读写文件操作,都是拿着这个文件对象来进行操作的~~

此处的文件对象 就像是一个"遥控器" 一样~

计算机中,也把这种远程操控的"遥控器"称为 "句柄" (handler)

4.关闭文件

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

打开文件,其实是在申请一定的系统资源~

不再使用文件时,资源应该及时释放.        "有借有还,再借不难"

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

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

#打开文件个数的上限
flist = []
count = 0
while True:
    f = open("C:\\Users\\86178\\Desktop\\新建 文本文档.txt", "r")
    flist.append(f)
    count += 1
    print(f"打开文件的个数:{count}")

虽然这里的文件打开到8189就报错了.但是.在系统中,是可以通过一些设置项,来配置能打开文件的最大数目~~

但是无论配置多少,都不是无穷无尽的~~就需要记得及时关闭,释放资源~~

关闭文件,再打开,只要内存足够大,打开文件的个数就越多

文件资源泄露,是一个非常严重的问题~~

不会第一时间暴露出来,而是在角落里,偷偷的偷袭一下~~

在开发过程中要非常注意~

Python中 有一个重要机制,垃圾回收机制(GC),自动的把不使用的变量,给进行释放~

虽然python 给了一个后手,让我们在一定程度上避免上述问题,但也不能完全依赖,自动释放机制~~

因为自动释放不一定及时~~

因此还是需要手动进行释放,避免万无一失~

5.写文件

#使用` write 来实现写文件操作
f = open("C:\\Users\\86178\\Desktop\\新建 文本文档.txt","w")
f.write("hello")
f.close()

# 写文件的时候, 需要使用 w 的方式打开. 如果是 r 方式打开, 则会抛出异常
f = open("C:\\Users\\86178\\Desktop\\新建 文本文档.txt","r")
f.write("hello")
f.close()

如果是使用 w 方式打开, 会清空掉文件原有的内容!!

如果是使用 a 方式打开,则不会清空,写的内容会追加在原有文件的末尾.

# 写方式打开,其实又有两种情况,1.直接方式打开, 2.追加写方式打开~
f = open("C:\\Users\\86178\\Desktop\\新建 文本文档.txt","w")
f.write("1111\n")
f.close()

f = open("C:\\Users\\86178\\Desktop\\新建 文本文档.txt","a")
f.write("2222\n")
f.close()

# 如果文件对象已经被关闭, 那么意味着系统中和该文件相关的内存资源已经释放了,强行去写,就会出现异常.
f = open("C:\\Users\\86178\\Desktop\\新建 文本文档.txt","w")
f.close()
f.write("hello")

6.读文件

利用 read 读取以下文件内容

#使用 read 来读取文件内容,指定读取几个字符
f = open("C:\\Users\\86178\\Desktop\\新建 文本文档.txt","r")
result = f.read(2)
print(result)
f.close()

中文和英文类似, 在计算机中, 都市使用 "数字" 来表示字符的

哪个字符对应哪个汉字,其实在计算机中,可以有多个版本~~

最常见的是: GBK版本 和 UTF8版本 

实际开发的时候就需要保证,文件内容的编码方式和代码中操作文件的编码方式,匹配~

上面的代码是尝试利用 GBK 方式进行解析

但是,我们可以看到文档格式是 UTF-8,和读取格式不匹配,所以会报错.

所以,解决方法,就是格式统一 ~~

此处我们使用的办法,是让代码按照 utf 8 来进行处理~

相比于 gbk , utf 8 是使用更广泛的编码方式~

在Python语言中,函数的参数可以分为两类:位置参数和关键字参数。位置参数就是按照参数定义的顺序传递给函数的参数;关键字参数则是通过给参数指定名称来传递。

关键字参数的作用是可以传递默认参数值

位置参数则必须按照参数定义的顺序传递参数值。

这样可以提高代码的可读性和可维护性,因为传递参数时,使用关键字参数可以明确地指定每个参数的含义

关键字参数和位置参数的关系:当函数同时接收位置参数和关键字参数时位置参数必须在关键字参数之前传递。例如,定义如下函数:

def greet(name, age):
    print(f"Hello {name}, you are {age} years old")

则我们可以使用如下方式调用函数:

greet("Alice", 25)  # 使用位置参数
greet(age=25, name="Alice")  # 使用关键字参数

注意,上面两个调用的输出结果是一样的,因为当使用关键字参数时,参数的顺序已经不再重要了,只要参数名称正确即可

#使用 read 来读取文件内容,指定读取几个字符
f = open("C:\\Users\\86178\\Desktop\\新建 文本文档.txt","r",encoding="utf8")
result = f.read(2)
print(result)
f.close()

#2. 更常见的需求, 按行读取~~
#   最简单的办法, 直接 for 循环.
f = open("C:\\Users\\86178\\Desktop\\新建 文本文档.txt","r",encoding="utf8")
for line in f:
    print(f"line = {line}")
f.close()

之所以多了个空行,是因为

本来读取的文件内容(这一行内容,末尾就带有 \n)

此处使用print 来打印,又会自动加一个换行符~

so 我们可以给print 再多设定个参数, 修改print 自动添加换行的行为

f = open("C:\\Users\\86178\\Desktop\\新建 文本文档.txt","r",encoding="utf8")
for line in f:
    print(f"line = {line}",end="")
f.close()

end 参数表示每次打印之后要在末尾加个东西

默认是换行符 \n

修改成 "也就是啥都不加!

# 3. 还可以使用 readlines 方法直接把整个文件所有内容都读取出来,按照行组织到一个列表里.
f = open("C:\\Users\\86178\\Desktop\\新建 文本文档.txt","r",encoding="utf8")
lines = f.readlines()
print(lines)
f.close()

summary:

文件较大--->利用for循环,多次读取.

文件较小--->利用readlines一次读完

7.上下文管理器

有的时候,我们还是会容易漏掉 close 文件,即使你不会,

你的伙伴也可能漏掉,防不胜防~~

不怕神一样的对手,就怕猪一样的队友~

    if cond:
        # 进行条件处理
        return
    #另外一些代码
    #另外一些代码
    #另外一些代码
    #另外一些代码
    #另外一些代码
    #另外一些代码
    #另外一些代码
    #另外一些代码
    #另外一些代码
    #另外一些代码
    #另外一些代码
    #另外一些代码
    #另外一些代码
    #另外一些代码
    f.close()

so 我们使用上下文管理器(with ... as...)就能解决问题

# 上下文管理器的使用
def func():
    with open("C:\\Users\\86178\\Desktop\\新建 文本文档.txt","r",encoding="utf8") as f:
        #进行文件这里的逻辑处理
        #假设这里有很多代码
        #假设这里有很多代码
        #假设这里有很多代码
        #假设这里有很多代码
        #假设这里有很多代码
        #假设这里有很多代码
        #假设这里有很多代码
        #假设这里有很多代码
        #假设这里有很多代码
        if cond:
            return
        #假设这里有很多代码
        #假设这里有很多代码
        #假设这里有很多代码
        #假设这里有很多代码
        #假设这里有很多代码
        #假设这里有很多代码

上下文管理器起到的效果:

当 with 对应的代码执行结束 ,就会自动的执行 f 的 close

相当于C++里面的智能指针, Java 的 try with Resources,  Golang 的 defer

🍁文件的管理器就分享到这里啦~🍁

🍁喜欢就一键三连支持一下吧~🍁

🍁谢谢家人们!🍁

评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Aileen_0v0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值