目录
- 猴子补丁是什么?
- PEG是什么?
- 加密散列?
- IDLE是什么?
- JIT是什么?
- 在Linux中查看文件的操作
- with open的好处是什么?
- 隐式递归是什么?优缺点?
- 递归是什么?优缺点?
- MIPS是什么?
- DRAM和SRAM区别?
- 生成式是什么?优缺点?
- 生成器是什么?优缺点?
- 迭代器是什么?优缺点?
- 生产器和迭代器的区别?
- 内存地址是干什么的?
- 你知道那些数据库?
- 魔法方法iter和next的用处?
- 匿名函数是什么?优缺点?
- Python常见的异常类有哪些?
- 你知道的Python解释器都有哪些?
- 元类是什么?优缺点?
- 拒绝服务攻击是什么?
- OSI网络七层协议
- TCP的三握四挥
- Python中的运算符
- python 图形用户界面的库
- MRO是什么?
- python os操作文件方法
- python绝对路径和相对路径的区别
-
猴子补丁是什么?
- 猴子补丁是一种在运行时动态修改或扩展现有代码的技术。它允许开发人员在不修改原始代码的情况下,向已有的类、模块或对象添加、修改或删除方法、属性或其他行为。
-
PEG是什么?
- PEG是一种用于描述语法规则和进行解析的形式语法。它是一种上下文无关文法的扩展,具有更强大的表达能力和优势。
-
加密散列?
- 加密散列是密码学中一种常用的算法,用于将任意长度的数据转换成固定长度的哈希值。加密散列具有以下特点:
-
单向性:加密散列是单向的,即无法从哈希值还原出原始数据。你只能通过对原始数据进行散列运算来得到哈希值。
-
唯一性:不同的输入数据很难产生相同的哈希值。即使输入数据的微小改变也会导致完全不同的哈希值。
-
不可逆性:由于加密散列是单向的,无法通过哈希值逆推出原始数据。因此,加密散列在密码存储、数字签名、消息完整性验证等场景中非常有用
-
- 加密散列是密码学中一种常用的算法,用于将任意长度的数据转换成固定长度的哈希值。加密散列具有以下特点:
-
IDLE是什么?
- IDLE是 Python 的官方集成开发环境(IDE)。它是一个简单而强大的工具,提供了编写、运行和调试 Python 代码的功能。
- 特点:交互式解释器,代码编辑器
-
JIT是什么?
- JIT是一种编译器的优化技术常用于动态编程语言的执行环境中,JIT编译器在运行时将部分代码编译成机器码,以提高程序的执行速度
-
在Linux中查看文件的操作
- cat 文件名:输出文件里的全部内容
- head 3 文件名:输出头部的前三行
- tail 3 文件名:输出尾部的后三行
- ls -l 文件名:显示文件的详细信息,包括权限、所有者、大小等
- stat 文件名:显示文件的详细属性,包括访问时间、修改时间、文件类型等。
- du -h 文件名:显示文件或目录的大小,以人类可读的方式显示。
- file 文件名:显示文件的类型信息,如文本文件、二进制文件等。
- wc 文件名:统计文件的行数、字数和字符数。
-
with open的好处是什么?
with open
是在 Python 中用于打开文件的一种常见的语法结构。它提供了一种上下文管理器的方式来处理文件对象,具有以下好处:- 自动关闭文件
- 异常安全
- 简洁和可读性
-
隐式递归是什么?优缺点?
- 隐式递归是指在程序中使用函数或方法自身来实现递归的一种方式,也被称为自身调用或自动递归。在隐式递归中,函数或方法在执行过程中会调用自身,以便解决更小规模的子问题,直到达到递归的终止条件。
- 优点:
- 简介性:隐式递归的代码通常相对简洁,易于理解和编写。它允许开发人员将问题的解决方案直接映射为递归调用自身的形式,使得代码更具表达力。
-
自然性:对于一些问题,递归是自然的解决方法。隐式递归允许程序员直接按照问题的本质进行建模和编写代码,使得代码更接近问题的描述。
- 缺点:
-
可能导致性能问题:隐式递归可能会导致重复计算和额外的函数调用开销,因为每次递归调用都需要创建新的函数帧。对于某些问题和大规模数据,隐式递归可能会导致性能下降。
-
可能导致栈溢出:隐式递归在每一层递归都需要在栈上分配内存,如果递归深度过大,可能导致栈溢出的风险。
-
难以理解和调试:由于递归涉及函数的自我调用,程序的执行流程可能会比较复杂,理解和调试递归代码可能更具挑战性。
-
- 优点:
- 隐式递归是指在程序中使用函数或方法自身来实现递归的一种方式,也被称为自身调用或自动递归。在隐式递归中,函数或方法在执行过程中会调用自身,以便解决更小规模的子问题,直到达到递归的终止条件。
-
递归是什么?优缺点?
- 递归是一种在算法或程序中使用自身进行重复调用的技术。在递归中,函数或方法会在执行过程中调用自身,以解决更小规模的子问题,直到达到递归的终止条件。
- 优点
-
可读性:递归代码通常比迭代代码更简洁和易读。它将问题的解决方案直接映射为递归调用自身的形式,使得代码更具直观性。
-
分而治之:递归可以将复杂问题分解为较小的子问题,通过解决子问题并将它们合并来解决整个问题。这种分而治之的思想有助于问题的解决和代码的组织。
-
- 缺点
-
性能开销:递归可能导致额外的函数调用开销和重复计算。每次递归调用都需要创建新的函数帧和保存上下文信息,这可能会导致性能下降。
-
栈溢出风险:递归涉及函数的自我调用,每次递归调用都需要在栈上分配内存。如果递归深度过大,可能导致栈溢出的风险。
-
- 优点
- 递归是一种在算法或程序中使用自身进行重复调用的技术。在递归中,函数或方法会在执行过程中调用自身,以解决更小规模的子问题,直到达到递归的终止条件。
-
MIPS是什么?
-
mips是指计算机的单字长定点指令平均执行速度每秒处理的百万级的机器语言指令数。
-
-
DRAM和SRAM区别?
- DRAM:DRAM 是一种动态存储器,每个存储单元由一个电容和一个访问晶体管组成。电容的电荷表示存储的数据,但需要定期刷新来维持电荷状态,因此称为动态存储器。
- SRAM:SRAM 是一种静态存储器,每个存储单元由多个晶体管组成。SRAM 使用电路逻辑来保持存储数据的状态,不需要定期刷新,因此称为静态存储器。
-
生成式是什么?优缺点?
- 生成式是一种在编程语言中用于简洁地创建数据结构(如列表、集合、字典)的语法。生成式允许使用简洁的表达式来定义数据结构的元素,并且可以根据特定的规则生成元素。
- 优点
-
简洁性:生成式提供了一种简洁的语法来定义数据结构的元素,使代码更具可读性和表达力。相比手动使用循环来创建数据结构,生成式更为简洁和直观。
-
代码复用:生成式允许使用表达式来生成数据结构的元素,可以利用已有的变量和函数进行计算,从而实现代码的复用和组合。
-
性能优化:生成式通常使用底层的迭代机制来生成数据结构的元素,底层实现往往会进行优化,从而提高代码的执行效率。
-
- 缺点
-
可读性限制:过于复杂的生成式可能会降低代码的可读性。当生成式的表达式和规则变得复杂时,可能会导致代码难以理解和调试。
-
内存占用:生成式一次性生成完整的数据结构,对于大型数据集或无限序列,可能会占用大量内存。
-
无法中断:生成式一旦开始执行,会一次性生成全部元素,无法在中途中断或跳过某些元素。这可能会导致在处理大数据集时的性能问题
-
- 优点
- 生成式是一种在编程语言中用于简洁地创建数据结构(如列表、集合、字典)的语法。生成式允许使用简洁的表达式来定义数据结构的元素,并且可以根据特定的规则生成元素。
-
生成器是什么?优缺点?
- 生成器是一种特殊类型的迭代器,用于按需生成数据序列。生成器函数是一种特殊的函数,使用
yield
语句生成值,并且在生成值后暂停状态,等待下一次迭代时继续执行。生成器可以一次生成一个值,而不需要一次性生成所有值,从而节省内存和提高效率。- 优点
-
节省内存:生成器按需生成数据,每次生成一个值,并且在生成值后暂停状态,因此不需要一次性生成全部数据,节省了内存消耗。
-
惰性计算:生成器的值是按需生成的,只在需要时才会进行计算和生成,从而提供了惰性计算的特性。这对于处理大型或无限序列的数据非常有用。
-
高效性:由于生成器是按需生成值的,可以有效地处理大型或无限序列的数据,避免了一次性处理大量数据的开销。
-
可迭代性:生成器是可迭代对象,可以使用
for
循环进行遍历,或通过next()
函数逐个获取生成的值。
-
- 缺点
-
单向迭代:生成器一般只能进行单向迭代,无法回溯或重复迭代生成的值。一旦生成器函数执行完毕或迭代结束,就无法再次利用。
-
无索引访问:生成器的值是按需生成的,无法通过索引进行随机访问,只能按顺序逐个获取生成的值。
-
难以并行处理:由于生成器是按需生成值的,无法同时并行处理多个值。如果需要并行处理多个值,可能需要考虑其他的并行处理机制。
-
- 优点
- 生成器是一种特殊类型的迭代器,用于按需生成数据序列。生成器函数是一种特殊的函数,使用
-
迭代器是什么?优缺点?
- 迭代器是一种对象,用于遍历容器或序列中的元素,提供了一种统一的访问接口。迭代器对象具有两个核心方法:
__iter__()
和__next__()
。 __iter__()
方法返回迭代器对象自身,用于支持迭代器的迭代协议。__next__()
方法返回容器中的下一个元素。如果没有更多元素可供迭代,它会引发StopIteration
异常。- 优点
-
惰性计算:迭代器按需生成和提供元素,只在需要时才计算和返回元素。这样可以避免一次性生成整个序列,节省内存和提高效率。
-
内存效率:迭代器只需存储当前迭代状态和计算下一个元素所需的信息,而不需要一次性存储整个序列。这对于处理大型或无限序列的数据非常有用。
-
通用性:迭代器提供了统一的访问接口,可以用于遍历各种容器和数据结构,包括列表、集合、字典等。这样可以编写通用的代码,提高代码的复用性。
-
延迟计算:迭代器支持延迟计算,即在需要时才进行计算。这对于处理大规模数据或需要按需加载数据的场景非常有用。
-
- 缺点
-
单向迭代:迭代器通常是单向的,只能前进一步并访问下一个元素。一旦迭代器到达末尾,无法回溯或重复迭代已访问的元素。
-
无索引访问:迭代器通常无法通过索引进行随机访问。只能按顺序逐个获取迭代器返回的元素。
-
迭代状态管理:使用迭代器时,需要手动管理迭代状态和处理
StopIteration
异常。这可能会增加代码的复杂性。
-
- 优点
- 迭代器是一种对象,用于遍历容器或序列中的元素,提供了一种统一的访问接口。迭代器对象具有两个核心方法:
-
生产器和迭代器的区别?
- 数据生成
- 生成器:按需生成值,每次生成一个值,并在生成值后暂停状态,等待下一次迭代时继续执行。
- 迭代器:按需提供容器中的下一个元素,通过
__next__()
方法逐个获取元素。
- 适用性
- 生成器:适用于按需生成值、处理大型数据集或无限序列的场景。
- 迭代器:适用于遍历容器、访问序列中的元素、处理迭代器对象等场景。
- 数据生成
-
内存地址是干什么的?
- 内存地址是用于标识计算机中存储位置的唯一标识符。在计算机系统中,每个存储单元都被赋予一个唯一的内存地址,用于定位和访问存储的数据。
-
你知道那些数据库?
-
关系型数据库(Relational Databases):
- MySQL
- Oracle Database
- Microsoft SQL Server
- PostgreSQL
- SQLite
-
非关系型数据库(NoSQL Databases):
- MongoDB
- Cassandra
- Redis
- Couchbase
- Neo4j
-
列存储数据库(Columnar Databases):
- Apache HBase
- Apache Cassandra
- Vertica
-
图形数据库(Graph Databases):
- Neo4j
- Amazon Neptune
- ArangoDB
-
时间序列数据库(Time Series Databases):
- InfluxDB
- TimescaleDB
- Prometheus
-
文档数据库(Document Databases):
- MongoDB
- Couchbase
- Elasticsearch
-
-
魔法方法iter和next的用处?
-
在 Python 中,
__iter__()
和__next__()
是用于实现迭代器(Iterator)协议的两个魔法方法。-
__iter__()
方法是一个迭代器对象必须实现的方法。它返回迭代器对象自身,并用于在迭代开始时进行初始化或重置操作。该方法在使用iter()
函数或在for
循环中调用时被自动调用。 -
__next__()
方法是迭代器对象必须实现的方法。它返回迭代器中的下一个元素,并在没有更多元素可供迭代时引发StopIteration
异常。该方法在使用next()
函数调用时被自动调用。
-
-
-
匿名函数是什么?优缺点?
- 匿名函数,也称为闭包,是一种在编程语言中定义函数的方式,它没有显式的函数名,通常用于需要在一个表达式中定义简单函数的场景。
- 优点
-
简洁性:匿名函数允许在需要的地方直接定义函数,无需额外的函数定义和命名过程,可以提高代码的简洁性和可读性。
-
灵活性:匿名函数可以作为参数传递给其他函数,或者在需要函数对象的地方使用,增加了代码的灵活性和可组合性。
-
封装性:匿名函数可以捕获其所在作用域的变量,形成闭包,使得函数可以访问和操作外部作用域的变量,增加了封装性和数据私有性。
-
-
缺点
-
可读性较差:由于没有明确的函数名,阅读代码时可能需要理解函数的定义和用途,增加了阅读的难度。
-
调试困难:在调试过程中,由于匿名函数没有明确的标识,可能会给定位和排查问题带来一定的困难。
-
重用性差:匿名函数通常用于定义简单的功能,对于需要在多个地方复用的函数来说,匿名函数并不方便,因为无法直接引用和调用。
-
- 优点
- 匿名函数,也称为闭包,是一种在编程语言中定义函数的方式,它没有显式的函数名,通常用于需要在一个表达式中定义简单函数的场景。
-
Python常见的异常类有哪些?
-
Exception
:所有异常类的基类,用于捕获大部分异常情况。 -
TypeError
:类型错误,当操作或函数应用于不兼容类型的对象时抛出。 -
ValueError
:值错误,当传递给函数的参数值无效时抛出。 -
NameError
:名称错误,当访问不存在的变量或名称时抛出。 -
IndexError
:索引错误,当尝试访问序列中不存在的索引时抛出。 -
KeyError
:键错误,当字典中不存在的键被使用时抛出。 -
FileNotFoundError
:文件未找到错误,当尝试打开不存在的文件时抛出。 -
IOError
:输入/输出错误,当发生输入/输出操作错误时抛出。 -
ZeroDivisionError
:零除错误,当除数为零时抛出。 -
AttributeError
:属性错误,当尝试访问对象不存在的属性时抛出。
-
-
你知道的Python解释器都有哪些?
-
CPython:官方的Python解释器,使用C语言实现,是Python语言的参考实现。
-
Jython:运行在Java虚拟机(JVM)上的Python解释器,可以与Java代码无缝交互。
-
IronPython:运行在.NET框架上的Python解释器,可以与C#和其他.NET语言互操作。
-
PyPy:使用Python实现的解释器,旨在提供更高的性能和即时编译功能。。
-
-
元类是什么?优缺点?
- 元类是面向对象编程中的概念,用于描述类的创建和定义类的行为。在Python中,元类允许开发人员自定义类的创建过程,并控制类的属性、方法和行为。
- 优点
-
类的自定义行为:元类允许开发人员在类级别上进行自定义行为的修改和控制。通过定义元类,可以对类进行自动修饰、扩展或应用特定的规则和逻辑。
-
共享功能和约束:通过使用元类,可以在多个类之间共享功能和约束。可以将公共行为提取到元类中,并使多个类继承该元类,从而实现代码的复用和一致性。
-
动态创建类:元类允许在运行时动态创建类,而不是在编译时静态定义。这种动态性使得可以根据运行时的需求创建类,从而实现更高级的编程模式和灵活性。
-
- 缺点
-
复杂性和学习曲线:使用元类需要了解面向对象编程和Python的高级概念。它涉及到类、实例、属性、方法等多个层面的概念,因此对于初学者来说可能会有一定的复杂性和学习曲线。
-
可读性和维护性:过度使用元类可能导致代码变得复杂和难以理解。由于元类可以对类的行为进行修改,这可能会使代码的可读性和维护性下降。因此,使用元类时需要权衡和谨慎使用。
-
兼容性和可移植性:元类的使用在不同的Python版本和不同的解释器之间可能会有一些差异和限制。某些特定的元类行为可能不是完全可移植的,需要在不同环境下进行测试和调整。
-
- 优点
- 元类是面向对象编程中的概念,用于描述类的创建和定义类的行为。在Python中,元类允许开发人员自定义类的创建过程,并控制类的属性、方法和行为。
-
拒绝服务攻击是什么?
- 拒绝服务攻击是一种恶意行为,旨在通过使目标系统无法提供正常服务,导致服务不可用或严重降级。攻击者通常通过使系统超负荷或耗尽关键资源来实现这一目的,使合法用户无法正常访问或使用系统。
-
拒绝服务攻击可以采取多种形式,包括以下几种常见的类型:
-
网络层攻击:攻击者通过发送大量的无效、重复或恶意的网络请求,占用目标系统的网络带宽或资源,导致正常流量无法正常传输。
-
协议层攻击:攻击者针对目标系统的协议漏洞或设计弱点,发送特制的恶意请求或异常数据包,导致目标系统崩溃或资源耗尽。
-
应用层攻击:攻击者通过向目标应用程序发送大量请求或恶意数据,以消耗目标系统的计算资源、内存或存储空间,导致应用程序无法响应合法用户的请求。
-
分布式拒绝服务攻击(Distributed Denial of Service, DDoS):攻击者通过协调多个恶意软件(僵尸网络或蠕虫)控制的计算机或设备,同时发起大规模的拒绝服务攻击,使目标系统无法承受巨大的流量或请求压力。
-
-
OSI网络七层协议
-
OSI(Open Systems Interconnection)是一个国际标准化的参考模型,用于描述计算机网络中不同层级之间的通信和协议交互。该模型将网络通信划分为七个不同的层级,每个层级负责特定的功能和任务。以下是OSI网络七层协议:
-
物理层(Physical Layer):负责定义物理介质和传输媒介的规范,包括电压、电流、光信号等。它处理位级的数据传输。
-
数据链路层(Data Link Layer):负责将物理层提供的数据流分割为数据帧,并提供错误检测和纠正的机制,以确保数据传输的可靠性。
-
网络层(Network Layer):负责在不同网络之间进行数据包的路由选择和转发,以实现数据在不同网络节点之间的传递。
-
传输层(Transport Layer):负责提供端到端的数据传输服务,包括可靠的数据传输、流量控制和拥塞控制。常见的协议有TCP(传输控制协议)和UDP(用户数据报协议)。
-
会话层(Session Layer):负责建立、管理和终止应用程序之间的通信会话。它提供了会话的控制和同步功能。
-
表示层(Presentation Layer):负责数据的格式转换、数据加密和解密、数据压缩和解压缩等,以确保不同系统之间的数据交换能够正确解释和理解。
-
应用层(Application Layer):提供网络服务和应用程序之间的接口,包括电子邮件、文件传输、远程登录等各种应用。
-
-
-
TCP的三握四挥
-
TCP(传输控制协议)使用三次握手(Three-Way Handshake)建立连接,并使用四次挥手(Four-Way Handshake)终止连接。下面是TCP三握手和四挥手的过程:
-
三次握手(建立连接):
-
第一步:客户端发送一个带有 SYN(同步序列编号)标志的连接请求报文段(SYN包)给服务器,并选择一个初始的序列号(ISN)。
-
第二步:服务器收到客户端的连接请求后,发送一个带有 SYN/ACK(同步/确认)标志的应答报文段(SYN/ACK包),确认收到客户端的请求,并指定服务器的初始序列号(ISN),同时为之后的数据传输分配接收缓冲区。
-
第三步:客户端收到服务器的应答后,发送一个带有 ACK(确认)标志的报文段(ACK包),确认服务器的确认。这样,客户端与服务器之间的连接建立完成,可以进行数据传输。
-
-
四次挥手(终止连接):
-
第一步:客户端发送一个带有 FIN(结束)标志的报文段(FIN包),表示客户端没有数据要发送了。
-
第二步:服务器收到客户端的结束请求后,发送一个带有 ACK标志的报文段(ACK包),确认收到客户端的结束请求。
-
第三步:服务器继续发送一个带有 FIN标志的报文段(FIN包),表示服务器也没有数据要发送了。
-
第四步:客户端收到服务器的结束请求后,发送一个带有 ACK标志的报文段(ACK包),确认服务器的结束请求。这样,双方都确认对方的结束请求,连接被正式关闭,完成挥手过程。
-
通过三次握手,客户端和服务器建立了可靠的连接,可以进行数据的传输。通过四次挥手,双方正常终止连接,确保数据传输完整性。
-
-
-
Python中的运算符
-
算术运算符:
+
:加法-
:减法*
:乘法/
:除法//
:整除(取商)%
:取模(取余数)**
:幂运算
-
比较运算符:
==
:等于!=
:不等于>
:大于<
:小于>=
:大于等于<=
:小于等于
-
赋值运算符:
=
:简单赋值+=
:加法赋值-=
:减法赋值*=
:乘法赋值/=
:除法赋值//=
:整除赋值%=
:取模赋值**=
:幂赋值
-
逻辑运算符:
and
:逻辑与or
:逻辑或not
:逻辑非
-
位运算符:
&
:按位与|
:按位或^
:按位异或~
:按位取反<<
:左移>>
:右移
-
成员运算符:
in
:存在于not in
:不存在于
-
身份运算符:
is
:判断两个对象是否为同一对象is not
:判断两个对象是否不是同一对象
-
其他运算符:
()
:括号,用于改变运算顺序[]
:索引运算符,用于访问列表、元组等的元素“.”
:点运算符,用于访问对象的属性和方法
-
-
python 图形用户界面的库
-
Python提供了多个图形用户界面(GUI)库,用于创建交互式的桌面应用程序。以下是五个常用的Python GUI库:
-
Tkinter:Tkinter是Python标准库中的GUI工具包,它基于Tk GUI工具包,提供了简单而直观的方法来创建GUI应用程序。Tkinter易于学习和使用,适合初学者或需要快速创建简单GUI的项目。
-
PyQt:PyQt是一个基于Qt库的Python绑定,提供了丰富的GUI组件和功能。它是一个功能强大的GUI框架,可以创建复杂和专业的桌面应用程序。PyQt具有广泛的文档和支持社区。
-
PySide:PySide是另一个基于Qt库的Python绑定,与PyQt类似,也提供了丰富的GUI组件和功能。它允许使用Qt的功能来创建跨平台的GUI应用程序。
-
wxPython:wxPython是一个基于wxWidgets库的Python绑定,提供了跨平台的GUI开发工具。它具有丰富的GUI组件和功能,并且与底层库紧密集成,使得创建各种类型的应用程序变得容易。
-
Kivy:Kivy是一个开源的Python GUI库,专注于创建跨平台的多点触控应用程序。它提供了丰富的GUI组件和特性,并支持移动设备和嵌入式平台。Kivy使用Python语言和OpenGL进行开发,具有很好的可扩展性和灵活性。
-
-
MRO是什么?
- MRO(方法解析顺序)是在多继承中确定方法调用顺序的一种算法。在 Python 中,可以使用
__mro__
属性查看类的方法解析顺序。 -
MRO 确定了以下规则:
-
子类优先于父类:在方法解析顺序中,子类的方法优先于父类的方法。
-
多继承时的顺序:在多继承的情况下,会按照从左到右的顺序解析父类。即,首先解析第一个父类,然后解析第二个父类,以此类推。
-
单调性:如果在构建方法解析顺序时遇到了一个冲突,那么在解决该冲突时,应该保持从左到右的顺序。换句话说,应该优先解析更早出现在继承列表中的类。
-
-
以下是一个简单的示例,演示了 MRO 的用法和方法解析顺序的结果
-
class A: def hello(self): print("Hello from A") class B(A): def hello(self): print("Hello from B") class C(A): def hello(self): print("Hello from C") class D(B, C): pass d = D() d.hello() # 输出: Hello from B print(D.__mro__) # 输出: (<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>)
-
- MRO(方法解析顺序)是在多继承中确定方法调用顺序的一种算法。在 Python 中,可以使用
-
python os操作文件方法
-
打开文件:使用
open()
函数打开文件,可以指定打开模式(读取、写入、追加等)和文件名。 -
关闭文件:使用
close()
方法关闭已打开的文件,释放资源。 -
读取文件内容:使用
read()
方法读取整个文件的内容,或使用readline()
方法逐行读取文件内容,或使用readlines()
方法将文件内容读取到列表中。 -
写入文件:使用
write()
方法向已打开的文件写入内容,覆盖原有内容。 -
追加写入文件:使用
write()
方法向已打开的文件追加内容,将新内容添加到文件末尾。 -
逐行读取文件:使用循环结合
readline()
方法逐行读取文件内容,处理每一行的数据。 -
重命名文件:使用
rename()
方法将文件重命名,需要指定旧文件名和新文件名。 -
删除文件:使用
remove()
方法删除指定的文件。 -
获取文件信息:使用
stat()
方法获取文件的元数据信息,如文件大小、修改时间等。 -
判断文件或目录是否存在:使用
exists()
方法检查文件或目录是否存在。 -
创建目录:使用
mkdir()
方法创建新的目录。 -
删除目录:使用
rmdir()
方法删除指定的空目录。 -
遍历目录:使用
listdir()
方法获取目录中的文件和子目录列表,可以结合循环进行遍历。 -
获取文件路径:使用
abspath()
方法获取文件的绝对路径。
-
-
python绝对路径和相对路径的区别
-
绝对路径是从根目录开始的完整路径,包括所有父级目录。在Windows操作系统中,绝对路径通常以盘符(如C:\)开头,而在UNIX或类UNIX系统中,则是以斜杠(/)开头。
-
相对路径是相对于当前工作目录的路径。它不包括根目录,只包括当前目录及其子目录。相对路径可以使用一些特殊符号来表示路径关系,如".."表示上级目录,"."表示当前目录。
-