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

news2025/1/16 1:38:20

🌈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

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

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

🍁谢谢家人们!🍁

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/998428.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

秒杀场景下用Redis分布式锁解决超卖问题

前言 超卖问题通常出现在多用户并发操作的情况下,即多个用户尝试购买同一件商品,导致商品库存不足或者超卖。解决超卖问题的方法有很多:乐观锁、Redis分布式锁、消息队列等。 分布式锁是一种多节点共享的同步机制,通过在多个节点…

《TCP/IP网络编程》阅读笔记--getsockopt和setsockopt的使用

目录 1--Socket的多种可选项 2--getsocketopt() 3--setsockopt() 4--代码实例 1--Socket的多种可选项 Socket 拥有多种可选项,其可分为 SOL_SOCKET 层,IPPROTO_IP 层和IPPROTO_TCP 层等,一般通过 getsocketopt() 和 setsockopt() 函数进行…

【Cpolar内网穿透】公网SSH远程连接Termux – 电脑使用安卓Termux

目录 前言 1.安装ssh 2.安装cpolar内网穿透 3.远程ssh连接配置 4.公网远程连接 5.固定远程连接地址 前言 使用安卓机跑东西的时候,屏幕太小,有时候操作不习惯。不过我们可以开启ssh,使用电脑PC端SSH远程连接手机termux。 本次教程主要…

C#,《小白学程序》第二十课:大数(BigInteger)的四则运算之一,加法

大数的&#xff08;加减乘除&#xff09;四则运算、阶乘运算。 乘法计算包括小学生算法、Karatsuba和Toom-Cook3算法。 重复了部分 19 课的代码。 1 文本格式 using System; using System.Linq; using System.Text; using System.Collections.Generic; /// <summary>…

软件架构设计(十一) 软件产品线

1、基本概念 软件产品线是从DSSA(特定领域架构)扩展而来的,我们从事软件开发,当您有了多年的经验之后,往往会沉淀到某一个特定领域,然后做这个领域的行业软件。 此时,您会把一些共性的东西开发出来,稳定下来。如果以后再开发同类型的系统时,做一些小修小改或者应用层…

《Python趣味工具》——自制emoji(1)绘制爱心应援牌❤️

项目目标&#xff1a; 本项目旨在学习如何自制emoji&#xff0c;学习内容主要分为3个方面&#xff0c;分3次来讲&#xff0c;根本在于了解了turtle的使用&#xff01; 1.完成一个爱心应援牌 2.完成静态的emoji 3.让emoji动起来&#xff01; 今天我们来学习第一个部分。 文章目录…

推荐一个图像生成开源项目——Fooocus

目录 什么是Fooocus&#xff1f; 项目地址 性能消耗 如何安装 效果对比 总结 什么是Fooocus&#xff1f; Fooocus是一款图像生成软件&#xff0c;但它不同寻常&#xff0c;是对稳定扩散&#xff08;Stable Diffusion&#xff09;和Midjourney的设计理念的巧妙重新思考。本…

C语言经典100例题(42)--学习使用auto定义变量的用法

目录 题目 问题分析 代码 运行结果 题目 学习使用auto定义变量的用法 问题分析 auto存储类型只对属于块的变量有效。auto变量具有自动存储期限、块作用域&#xff0c;并且无连接。auto存储类型几乎从来不用明确地指明&#xff0c;因为对于在块内部声明的变量&#xff0c;…

超经典 Linux 运维巡检脚本及示例

inux 系统日常巡检脚本&#xff0c;巡检内容包含了&#xff1a;磁盘、内存、CPU、进程、文件更改、用户登录等一系列的操作&#xff0c;直接用就行了。 报告以邮件发送到邮箱&#xff0c;在 log 下生成巡检报告。 一、巡检脚本 #!/bin/bash # Author: HanWei # Date: 2020-…

Nginx__高级进阶篇之LNMP动态网站环境部署

动态网站和LNMP&#xff08;LinuxNginxMySQLPHP&#xff09;都是用于建立和运行 web 应用程序的技术。 动态网站是通过服务器端脚本语言&#xff08;如 PHP、Python、Ruby等&#xff09;动态生成网页内容的网站。通过这种方式&#xff0c;动态网站可以根据用户的不同请求生成不…

Sentinel-限流降级

0.目录 初识Sentinel 流量控制 隔离和降级 授权规则 规则持久化 1.初识Sentinel 1.0目录 雪崩问题及解决方案 服务保护技术对比 Sentinel介绍和安装 微服务整合Sentinel 1.1 雪崩问题 1.1.1 引起雪崩的原本 如果服务D出现了问题&#xff0c;那么当服务A调用服务D时&…

Jetpack Compose 1.5 发布:全新 Modifier 系统带来性能大幅提升

不久前 Compose 1.5.0 稳定版发布&#xff0c;在组合的性能方面得到明显改善&#xff0c;这主要归功于对 Modifier API 的持续重构。 Modifier 是 Compose 中的重要概念&#xff0c;为 Composition 中的 LayoutNode 配置各种样式信息以用于后续渲染。在 1.3.0 之前的 Modifier …

【教师节特辑】做个教师节快乐照片墙吧

写作原因&#xff1a; 教师节到了&#xff0c;身边或多或少都有很多不少的老师&#xff0c;基本以前认识的老师都不记得了&#xff0c;以后总也会认识一些日本老师的。程序员&#xff0c;就应该以自己的方式来庆祝教师节。想了下&#xff0c;要不还是做个照片墙把。 项目链接 …

2024年java面试--mysql(2)

系列文章目录 2024年java面试&#xff08;一&#xff09;–spring篇2024年java面试&#xff08;二&#xff09;–spring篇2024年java面试&#xff08;三&#xff09;–spring篇2024年java面试&#xff08;四&#xff09;–spring篇2024年java面试–集合篇2024年java面试–redi…

电商API与电商数据经济的产生【电商平台-淘宝/京东/拼多多下的API数据经济】

计算机连接了互联网后&#xff0c;释放出了巨大的创新力和价值&#xff0c;同样地&#xff0c;智能合约一旦连接到快速增长的链下数据和API经济&#xff0c;也将变得无比强大。如果智能合约可以连接至链下数据提供商、web API、企业系统、云服务商、物联网设备、支付系统以及其…

高分三号1米分辨率飞机检测识别数据集

二、背景介绍 合成孔径雷达(Synthetic Aperture Radar, SAR) 是一种主动式的微波成像系统&#xff0c;它不受光照、云雾 和气候等自然条件影响&#xff0c;具备全天时、全天候对地 观测的能力&#xff0c;已成为遥感领域重要的信息获取平 台。近年来&#xff0c;随着遥感成像技…

Redis主从复制集群的介绍及搭建

在现代的软件开发中&#xff0c;数据的可靠性和可用性是至关重要的。Redis&#xff0c;作为一个开源的、内存中的数据结构存储系统&#xff0c;以其出色的性能和灵活的数据结构&#xff0c;赢得了开发者们的广泛喜爱。而 Redis 的主从复制功能&#xff0c;更是为我们提供了一种…

基于AHP模型指标权重分析python整理

一 背景介绍 日常会有很多定量分析的场景&#xff0c;然而也会有一些定性分析的场景针对定性分析的场景&#xff0c;预测者只能通过主观判断分析能力来推断事物的性质和发展趋势然而针对个人的直觉和虽然能够有一定的协助判断效果&#xff0c;但是很难量化到指标做后期的复用 …

Mybatis学习笔记2 增删改查及核心配置文件详解

Mybatis学习笔记1 Mybatis入门_biubiubiu0706的博客-CSDN博客 将Mybatis进行封装 SqlSessionUtil工具类 package com.example.util;import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFacto…

modinfo对比内核版本号

加载内核&#xff0c;出现版本不一样 cat /proc/verison查看内核板本 模块版本&#xff1a;显示模块的版本号。 $ modinfo [OPTIONS] [MODULE] 参数说明-F, --field <field>: 指定要显示的字段&#xff0c;可以使用逗号分隔多个字段。-k, --kernel <kernel>: 指定…