import os
def txt(name, text):
new = os.getcwd() + '\\cache\\'
if not os.path.exists(new):
os.makedirs(new)
xxoo = new + name + '.txt'
file = open(xxoo, 'w')
file.write(text)
file.close()
print('文件创建成功', xxoo)
with open(xxoo, 'r') as file:
rr = file.read()
print(rr)
# 创建名称为test的txt文件,内容为hello,python
txt('text', '我爱北京天安门')
1.os.getcwd():获取当前文件的路径
2.makedirs():创建一个文件夹
3.python 文件open方式
r 只能读,光标在头从头读取,文件不存在会报错
r+ 能读写,光标在头从头读取,文件不存在会报错
w 只能写,清空内容从头编辑,文件不存在会创建
w+ 能读写,清空内容从头编辑,文件不存在会创建
a 只能写,光标在尾追加编辑,文件不存在会创建
a+ 能读写,光标在尾追加编辑,文件不存在会创建
加一个b的代表以二进制格式操作,如rb、rb+、wb、wb+、ab、ab+,操作方法不变
4.递归的扩展(隐式递归)
隐式递归是一种递归算法的实现方式,其中递归调用并没有明确地出现在代码中,而是通过函数或方法内部的循环来隐式地实现递归。
在隐式递归中,函数或方法通过不断迭代自身来实现递归调用,而不是显式地使用递归关键字或语句。这样做的好处是避免了递归调用带来的函数调用开销和堆栈空间的使用,使得算法更加高效
一个常见的示例是使用循环来计算阶乘。而不是使用传统的递归调用方式,我们可以使用一个循环来迭代地计算乘积。这种方式被称为隐式递归。
5.递归需要满足的条件
基本情况(递归终止条件):递归函数必须定义一个基本情况,当满足该条件时,递归停止,返回一个明确的结果。如果没有正确定义基本情况,递归函数可能会陷入无限递归的循环中。
递归调用的规模减小: 递归函数必须通过每次调用自身来解决一个规模更小的子问题,否则递归没有意义。这样,通过不断缩小规模,递归函数可以最终达到基本情况。
递归深度限制:递归函数的递归深度是指递归调用的层数。每一层的递归调用都对应着一个栈的创建,如果递归深度过大,可能会导致栈溢出的问题。因此,需要注意控制递归深度,避免出现栈溢出的情况。
合适的问题类型:递归函数适用于可以通过将问题分解为更小的子问题来解决的问题。不是所有的问题都适合使用递归函数,有些问题可能更适合使用迭代或其他方法来解决。
6.虚拟环境的的创建
1.创建的命令:python -m venv 虚拟环境的名
2.启动虚拟环境:进入创建的虚拟环境里的Scripts\activate启动
7.在Python中,使用with open语句进行文件操作是一种推荐的做法,因为它有几个优点
1.自动关闭文件: 使用with open语句可以确保在操作结束后自动关闭文件。在代码块执行完毕后,无论是正常执行还是发生异常,文件都会被正确关闭。这样可以避免因为忘记关闭文件而导致资源泄漏的问题。
2.简洁和优雅: with open语句的语法简洁明了,使得代码更加清晰和易读。它可以将文件操作的相关代码块封装在一个作用域内,提高了代码的可维护性。
总之,使用 with open 语句是一种推荐的做法,可以确保文件操作的安全性和简洁性。
8.代码书写一个生成器
# 利用生成器输出斐波那契数列
def title5():
a, b = 0, 1
while True:
yield a
a, b = b, a + b
b = title5()
for i in range(10):
print(next(b))
9.python常用的魔法方法
__init__(self, ...): 初始化一个对象,在创建对象时调用。
__str__(self):返回一个描述对象的字符串,可以使用str(obj)调用。
__repr__(self): 返回一个表示对象的字符串,可以使用repr(obj)调用。
__len__(self):返回对象的长度,可以使用len(obj)调用。
__getitem__(self, key):获取对象中指定键的值,可以使用obj[key]调用。
__setitem__(self, key, value):设置对象中指定键的值,可以使用obj[key] = value调用。
__delitem__(self, key): 删除对象中指定键的值,可以使用del obj[key]调用。
__iter__(self):返回一个可迭代对象,可以使用for ... in obj循环迭代调用。
__next__(self):返回下一个迭代器对象,可以使用next(obj)调用。
__add__(self, other): 定义加法运算符,可以使用obj1 + obj2调用。
__sub__(self, other):定义减法运算符,可以使用obj1 - obj2调用。
__mul__(self, other):定义乘法运算符,可以使用obj1 * obj2调用。
__div__(self, other):定义除法运算符,可以使用obj1 / obj2调用。
__eq__(self, other): 定义相等运算符,可以使用obj1 == obj2调用。
__ne__(self, other):定义不等运算符,可以使用obj1 != obj2调用。
__lt__(self, other): 定义小于运算符,可以使用obj1 < obj2调用。
__gt__(self, other):定义大于运算符,可以使用obj1 > obj2调用。
10.获取某个文件夹下的所有文件
import os
def traverse_directory(directory):
# dirpath # 是当前遍历到的目录的路径。
# dirnames # 是当前目录下的所有子文件夹的名称列表。
# filenames# 是当前目录下的所有文件的名称列表。
# os.path.join(dirpath, filename)# 将当前遍历到的目录路径和文件名合并成完整的文件路径。
for dirpath, dirnames, filenames in os.walk(directory): # os.walk(参数):返回一个生成器,用于递归地遍历指定目录及其子目录中的所有文件和文件夹。
for filename in filenames:
file_path = os.path.join(dirpath, filename)
# print('---------', dirnames)
print(file_path)
# 遍历目录树并打印文件路径
# directory_to_traverse = r"D:\H2209A-p10\p9_venv"
11.python中用读取代码用with和不用with的区别
1.在Python中,使用 with
关键字可以更方便地管理文件、网络连接和其他一些资源。它提供了一种上下文管理器的方式,确保资源的正确分配和释放,即使在代码中抛出异常的情况下也能正常运行
2.相比之下,如果不使用 with
进行文件读取操作,我们需要手动打开和关闭文件
3.使用的好处:使用 with
语句的好处是,在代码块执行结束后,无论是否发生异常,都会自动关闭文件。这样可以防止资源泄漏,并且能够更简洁地编写代码。