目录
python虚拟环境
什么是虚拟环境?虚拟环境是一个 Python 环境,其中安装的 Python 解释器、库和脚本与安装在其他虚拟环境中的那些是隔离的,而且(默认情况下)安装在系统 Python 中的任何库(即作为操作系统的一部分安装的库)也是隔离的。
我们推荐每进行一个新的项目开发,就创建一个仅适用于该项目的虚拟 Python 环境。这样有助于包管理,同时还能非常清晰地列出项目开发用到的所有包,生成一键安装清单,方便后期的部署或复现。
教程
venv
Python2 版本创建虚拟环境常使用一个名为 virtualenv 的第三方包。从 Python3.3 以后,标准库就内置了一个名为 venv 的模块,我们可以用它来创建虚拟环境,完全替换 virtualenv。
安装:不需要安装,Python3.3 及以上版本的内置标准模块。
用法
python -m venv ENV_DIR
ENV_DIR 指定存放环境的目录,一般使用 venv,这是一个不成文的规定。
Windows
.\ENV_DIR\Scripts\activate
Unix/macOS
source ENV_DIR/bin/activate
退出环境
deactivate
python打开文件
使用py内置的open()函数打开一个文件,创建文件
fp = open(path,[mode])
path:打开文件路径
mode:控制文件打开权限
python模式权限
r: 默认权限,读权限打开文件,当打开不存在文件时,抛出FileNotFoundError
w: 写权限打开文件,当文件不存在时,创建文件,打开内容文件时,会将文件清空
a: 追加权限打开文件,文件不存在,创建文件,不会清空已有内容,读写指针在文件末尾
python关闭文件
文件对象 close() 方法刷新缓冲区还没有写入的信息,并关闭该文件,之后便不能进入写入
文件对象引用被重新指定另一个文件python会关闭之前文件
fp.close()
python文件的写
write()方法将如何字符串写入一个打开的文件,注意:python字符串可以二进制而不是仅仅是文字
write()方法不会在字符串的结尾添加换行('\n')
fp.write(string)
writelines()向文件写入一个列字符串列表
fp.weitelones
文件的读操作
read()方法从一个打开的文件中读取的内容,默认读取全部内容并返回需要重点注意
不适合读取较大文件,这个方法一次默认读取全部
readline()会从文件中读取单独一行一行的标志\n,或文件结尾EOF
readline()返回一个空字符串,说明已经读取到最后一行
readlines()将列表的形式返回该文件中包含的所有行
文件操作例子
1.在E盘或者D型创建文件夹2209A,创建一个文件名为302的文件,将: “我爱北京天安门~”并输出 2.将天安门更新为西直门 3.将302文件备份,并复制一份到2209B文件夹,并改为203
import os
import shutil
# 创建文件夹
folder_name = "2209A"
folder_path = "E:\\" + folder_name # 如果是D盘,可以将路径修改为 "D:\\" + folder_name
os.makedirs(folder_path, exist_ok=True)
# 创建文件并写入内容
file_name = "302"
file_path = os.path.join(folder_path, file_name)
with open(file_path, "w") as file:
file.write("我爱北京天安门~~~~~")
# 读取文件内容并输出
with open(file_path, "r") as file:
content = file.read()
print("文件内容:", content)
# 更新文件内容
new_content = content.replace("天安门", "西直门")
with open(file_path, "w") as file:
file.write(new_content)
# 备份文件到2209B文件夹并改名为203
backup_folder = "2209B"
backup_folder_path = "E:\\" + backup_folder # 如果是D盘,可以将路径修改为 "D:\\" + backup_folder
os.makedirs(backup_folder_path, exist_ok=True)
backup_file_name = "203"
backup_file_path = os.path.join(backup_folder_path, backup_file_name)
shutil.copyfile(file_path, backup_file_path)
print("文件备份成功!")
递归
递归是一种在编程中经常使用的概念,指的是一个函数在其定义中引用了自身。简单来说,递归是通过将一个大问题拆分为更小的相似子问题并重复解决这些子问题来解决复杂问题的一种方法。
在递归函数中,函数会调用自身来解决较小的子问题。每次调用函数时,问题规模都会减小,直到达到了一个基本情况或边界情况,这时递归停止并返回结果。递归函数通常包含两个部分:基本情况和递归调用。
递归在许多算法和数据结构中都得到应用,如树的遍历、图的深度优先搜索、快速排序等。尽管递归是一个强大的工具,但在使用时需要小心,确保递归函数能够收敛到基本情况,否则可能导致无限循环并耗尽系统资源。
递归使用例子
import os
def get_files(path):
# 判断路径是否存在,如果不存在,函数直接结束
if not os.path.exists(path):
print('路径不存在')
return
# 判断路径是否为文件夹
if not os.path.isdir(path):
print('路径是一个文件')
return
# 这时候,路径是一个文件夹
# 获取文件夹中文件或文件夹的名称
file_list = os.listdir(path)
# 遍历文件夹
for filename in file_list:
# 拼接路径,获取每个次级目录下的文件路径
subpath = os.path.join(path, filename)
if os.path.isfile(subpath):
if os.path.splitext(subpath)[1] == '.py':
print('python文件:{}'.format(subpath))
else:
# 如果filename是文件夹,则调用函数继续遍历
get_files(subpath)
隐式递归
隐式递归是一种递归算法的实现方式,其中递归调用并没有明确地出现在代码中,而是通过函数或方法内部的循环来隐式地实现递归。
在隐式递归中,函数或方法通过不断迭代自身来实现递归调用,而不是显式地使用递归关键字或语句。这样做的好处是避免了递归调用带来的函数调用开销和堆栈空间的使用,使得算法更加高效
一个常见的示例是使用循环来计算阶乘。而不是使用传统的递归调用方式,我们可以使用一个循环来迭代地计算乘积。这种方式被称为隐式递归。