【python】(11)文件、异常和模块(python文件与异常慈母手中线)
off999 2024-10-12 06:18 54 浏览 0 评论
文件操作
写入与读取
在Python中,操作文件的步骤为: 打开文件open()->读写文件read()或write()->关闭文件close(),打开文件通过函数来实现。
基础写法
#打开文件
file = open('路径','打开方式')
#读取文件
content = file.read()
#写入文件
file.write('写入的内容')
#关闭文件
file.close()示例:
#写入
file1 = open('abc.txt','w',encoding = 'utf-8')
file1.write('我爱Python')
file1.close()
#读取
file2 = open('abc.txt','r',encoding = 'utf-8')
content = file2.read()
file2.close()
print(content)open()函数
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)参数解释
- file: 要打开的文件路径(绝对路径或相对路径)。
- mode: 打开文件的模式,默认是 'r'(只读模式)。常用的模式包括:
打开方式 | 解释 |
r | 只读 为输入打开一个文本文件(文件必须存在) |
w | 只写 为输出打开一个文本文件(如没有文件,则新建) |
a | 追加 向文本文件尾添加数据(如没有文件,则新建) |
x | 只写 创建一个文本文件并写入(文件必须不存在) |
rb | 只读 为输入打开一个二进制文件 |
wb | 只写 为输出打开一个二进制文件 |
ab | 追加 向二进制文件尾添加数据 |
r+ | 读写 为读写打开一个文本文件(文件必须已经存在) |
w+ | 读写 为读写建立一个新的文本文件 |
a+ | 读写 为读写打开一个文本文件(读写指针定位在最后) |
rb+ | 读写 为读写打开一个二进制文件 |
wb+ | 读写 为读写建立一个新的二进制文件 |
ab+ | 读写 为读写打开一个二进制文件读写文件的基本语法 |
- buffering: 设置文件的缓冲策略。
- 0:无缓冲。
- 1:行缓冲(仅适用于文本模式)。
- 大于 1的整数:指定缓冲区大小。
- -1:使用默认缓冲区大小。
- encoding: 用于解码或编码文件的编码方式,例如 'utf-8'。仅文本模式下有效。一般是'utf-8'或'gbk'。
- errors: 指定如何处理编码和解码错误,常见值有 'strict', 'ignore', 'replace'。
- newline: 控制换行符在读取和写入时的行为。可选值有 None, '', '\n', '\r', 和 '\r\n'。
- closefd: 如果文件是通过文件描述符(而不是文件名)打开的,这个参数控制文件关闭时是否关闭文件描述符(默认为True)。
- opener: 一个可调用对象,用于通过自定义方式打开文件描述符,返回文件描述符的整数。
seek()函数
seek() 函数在 Python 中是用来改变文件当前位置的。该函数是文件对象的一部分,允许你移动文件读取指针到文件中的不同位置。这在处理大文件或者需要从特定位置读取数据时非常有用。
file.seek(offset, whence=0)- offset:是移动操作的起始位置的偏移量,表示从哪里开始移动。正值表示向前移动,负值表示向后移动。
- whence:这是可选参数,决定了 offset的参考点。它有三个可能的值:
- 0(默认值):从文件的开头计算偏移量(绝对文件位置)。
- 1:从当前文件位置计算偏移量。
- 2:将文件的EOF作为移动的起点。
假设我们有一个名为 example.txt的文件,其内容如下:
Hello World
This is a test file.
Python is great!以下是一个使用 seek()函数的示例:
# 打开文件
with open('example.txt', 'r') as file:
# 移动到文件的第11个字节
file.seek(11)
# 从当前位置读取剩余的内容
content = file.read()
print(content)
# 重置指针到文件开头
file.seek(0)
# 读取第一行
first_line = file.readline()
print(first_line)
# 移动到文件的末尾
file.seek(0, 2)
# 尝试从文件末尾读取内容(不会读取到任何内容)
end_content = file.read()
print(end_content) # 输出将为空这个例子首先移动到文件的第11个字节处,然后读取并打印从那里到文件末尾的所有内容。然后,它将文件指针重置到文件的开头,并读取第一行。最后,它尝试从文件末尾开始读取内容,但由于已经到达了文件的末尾,所以不会读取到任何内容。
with关键字写法
使用 open()函数时,最佳实践是结合 with语句来自动管理文件资源,确保文件在使用后能够正确关闭。这样可以避免文件泄露和其他资源管理问题。
with open ('路径','打开方式') as file:
# 读取文件
content = file.read()
# 写入内容
file.write('写入内容')
#缩进,无需close()函数示例
with open('abc.txt','w',encoding = 'utf-8') as file1:
file1.write('我爱Python')
with open('abc.txt','r',encoding = 'utf-8') as file2:
content = file2.read()
print(content)txt文件的按行读取和按行写入
writelines():'按行重写',可以写入序列,返回一个字符串 readlines():'按行读取',返回一个列表,每一行为列表中的元素
a = ('人生', '如', '梦')
b = '人生苦短'
with open('demo.txt','w', encoding='utf-8')as f:
f.writelines(a)
f.write('\n' + b) # 换行写入
with open('demo.txt', 'r', encoding='utf-8') as f:
lines = f.readlines()
print(lines)
for line in lines: # 用for语句来遍历
print(line)输出结果:
['人生如梦\n', '人生苦短']
人生如梦
人生苦短示例
# Step 1: 读取文件的全部内容并打印
print("Step 1: Reading the entire content of the file.")
with open('example.txt', 'r', encoding='utf-8') as f:
content = f.read()
print(content)
# Step 2: 写入内容到文件
print("\nStep 2: Writing 'Hello, World!' into output.txt.")
with open('output.txt', 'w', encoding='utf-8') as f:
f.write('Hello, World!')
# Step 3: 追加内容到文件
print("Step 3: Appending 'Goodbye, World!' into output.txt.")
with open('output.txt', 'a', encoding='utf-8') as f:
f.write('\nGoodbye, World!')
# Step 4: 读取二进制文件(例如图片)
print("Step 4: Reading a binary file (an image).")
with open('image.png', 'rb') as f:
binary_content = f.read()
print(f"Binary content of image.png read. Length: {len(binary_content)} bytes.")
# Step 5: 逐行读取文件并转换为大写
print("\nStep 5: Reading lines one by one and converting to uppercase.")
with open('example.txt', 'r', encoding='utf-8') as file:
line = file.readline()
while line:
print(line.upper(), end='')
line = file.readline()
# Step 6: 读取所有行到列表中,然后反转每行并写入新文件
print("\nStep 6: Reading all lines, reversing, and writing to a new file.")
with open('example.txt', 'r', encoding='utf-8') as file:
lines = file.readlines()
reversed_lines = [line[::-1] for line in lines]
with open('reversed.txt', 'w', encoding='utf-8') as file:
file.writelines(reversed_lines)
# Step 7: 创建新的句子列表并写入文件
print("Step 7: Writing new sentences to another file.")
new_sentences = [
"Here are some new lines.\n",
"Python makes file manipulation easy!\n",
"Let's write these lines to a file.\n"
]
with open('new_sentences.txt', 'w', encoding='utf-8') as file:
file.writelines(new_sentences)OS模块总结
import os文件路径相关
函数 | 说明 | 返回 |
os.listdir() | 返回指定目录下的所有文件和目录名 | list(str) |
os.path.exists(文件夹路径) | 检验给出的路径是否真地存 | bool |
os.makedirs(r"c:\python\test") | 创建多级目录 |
常用方法列表
`os.getcwd()`:得到当前工作目录,即当前Python脚本工作的目录路径
`os.remove()`:函数用来删除一个文件
`os.removedirs(r"c\python")`:删除多个目录
`os.path.isfile()`:检验给出的路径是否是一个文件os.path.isdir()检验给出的路径是否是一个目录
os.path.isabs()判断是否是绝对路径
os.path.split()返回一个路径的目录名和文件名
os.path.splitext()分离扩展名
os.path.dirname()获取路径名
os.path.basename()获取文件名
os.system()运行shell命令
os.getenv() 与os.putenv()读取和设置环境变量
os.linesep 给出当前平台使用的行终止符,Windows使用'rn',Linux使用'n'而Mac使用'r'
os.name指示你正在使用的平台,对于Windows,它是'nt',而对于Linux/Unix用户,它是'posix'
os.rename(old, new)重命名:
os.mkdir("test")创建单个目录
os.stat(file)获取文件属性
os.chmod(file)修改文件权限与时间戳
os.exit()终止当前进程
os.path.getsize(filename)获取文件大小
os.mkdir("file")创建目录
shutil.copyfile("oldfile","newfile")复制文件, oldfile和newfile都只能是文件
shutil.copy("oldfile","newfile")oldfile只能是文件夹,newfile可以是文件,也可以是目标目录
shutil.copytree("olddir","newdir")复制文件夹,olddir和newdir都只能是目录,且newdir必须不存在
os.rename("oldname","newname")重命名文件(目录),文件或目录都是使用这条命令
shutil.move("oldpos","newpos")移动文件(目录)
os.remove("file")删除文件
os.rmdir("dir")删除目录, 只能删除空目录
shutil.rmtree("dir")空目录、有内容的目录都可以删
os.chdir("path")转换目录, 换路径
os.mknod("test.txt")创建空文件
异常处理
异常处理是编程中一种重要的概念,它帮助我们处理程序运行时可能遇到的错误和异常情况。Python通过一套完整的异常处理机制来帮助程序员捕获并处理运行时错误,从而提高程序的健壮性和可靠性。
基本概念
- 异常:在Python中,异常是一个事件,该事件会在程序执行过程中发生,中断了当前代码的正常流程。
- 捕获异常:通过异常处理机制,可以捕获并处理程序运行过程中发生的异常。
异常处理语法
Python使用 try和 except语句来捕获和处理异常。
try:
# 尝试执行的代码
result = 10 / 0
except ZeroDivisionError:
# 如果发生了ZeroDivisionError异常,执行这块代码
print("除数不能为0")多个异常
你可以通过一个 except语句捕获多个异常,将它们放在一个元组中。
try:
# 尝试执行的代码
result = 10 / "2"
except (ZeroDivisionError, TypeError) as e:
# 如果发生了ZeroDivisionError或TypeError异常,执行这块代码
print(f"发生错误:{e}")finally语句
无论是否发生异常, finally语句块中的代码都会被执行。这对于执行一些清理工作(如关闭文件)很有用。
try:
# 尝试执行的代码
f = open("file.txt")
f.read()
except FileNotFoundError as e:
# 文件未找到异常
print(f"文件未找到:{e}")
finally:
# 无论是否发生异常都会执行的代码
f.close()自定义异常
可以通过继承 Exception类来定义自己的异常类型。
class MyError(Exception):
pass
try:
raise MyError("这是一个错误信息")
except MyError as e:
print(e)异常链
在处理一个异常的时候引发另一个异常,可以使用 from来链接这两个异常。
try:
raise KeyError
except KeyError as e:
raise ValueError from e在Python中,模块是一个包含Python定义和语句的文件。模块可以定义函数、类和变量,也可以包含可执行的代码。模块让你能够逻辑地组织你的Python代码段。把相关的代码分配到一个模块里能让你的代码更好用、更易懂。模块也是Python对象,具有随机的名称属性用来绑定或引用同一模块内的函数、类、变量。
模块
import导入模块
Python中使用 import语句来导入模块。当解释器遇到 import语句时,如果模块在当前的搜索路径中,就会导入它。
import math
print(math.sqrt(16)) # 输出: 4.0from导入
导入模块中指定部分
使用 from...import语句可以从模块中导入特定的部分到当前命名空间中,如果有多个需要导入可以使用 ,来追加。
from math import sqrt,add
print(sqrt(16)) # 输出: 4.0导入模块中所有
使用 frommoduleimport*导入模块中的所有名称。
from math import *
print(sqrt(16)) # 输出: 4.0注意:这种导入方式不推荐使用,因为它可能会导入很多未使用的变量,从而污染命名空间。
重命名模块
使用 as给模块指定别名。
import math as m
print(m.sqrt(16)) # 输出: 4.0模块的搜索路径
1. 模块查找过程
当Python遇到一个 import语句时,它会根据以下顺序查找模块:
- 内置模块:Python首先查找其内部模块列表。如果模块名在此列表中,Python会直接加载内置模块。
- sys.modules缓存: sys.modules是一个字典,它缓存了所有已经加载的模块。如果模块已经在这个字典中,Python会直接从这里加载模块,而不会重新执行模块代码。
- sys.path搜索: sys.path是一个列表,包含了Python解释器的搜索路径。搜索路径的组成包括:
- 脚本的目录(或当前工作目录,如果是交互式解释器)。
- PYTHONPATH环境变量(如果设置)。
- 标准库目录。
- 安装的第三方模块和包的目录。
2. 模块编译
如果找到的模块是一个 .py文件,Python解释器会将其编译成字节码( .pyc文件),字节码是一种Python虚拟机可以直接执行的中间代码。编译后的字节码会被存储在 __pycache__目录下,以便于下次导入时加快加载速度。
3. 模块加载
加载阶段涉及到将编译后的字节码加载到Python的虚拟机中,并执行模块级别的代码。这一步会创建模块对象,初始化任何模块级别的变量和函数。
4. 模块初始化
如果模块是第一次被导入,它的顶层代码将被执行。这可能包括函数和类的定义,以及执行模块级别的操作。一旦模块的顶层代码执行完毕,模块就被视为已初始化。
5. 模块缓存
加载并初始化后的模块会被添加到 sys.modules缓存中。这意味着,如果之后再次导入同一个模块,Python会直接从缓存中加载,而不是重新执行模块代码。
特殊情况:包的加载
当导入一个包时,过程略有不同。包实际上是一个包含 __init__.py文件的目录。当包被导入时, __init__.py中的代码会被执行,可以用于初始化包的状态或执行必要的设置。
模块重加载
在某些情况下,你可能需要重新加载已修改的模块。这可以通过 importlib.reload()实现。请注意,重加载模块可能会导致与现有对象的兼容性问题。
创建自己的模块
创建自己的模块非常简单,因为每个Python文件都可以作为一个模块。你只需要确保它具有 .py扩展名。
# mymodule.py
def greeting(name):
print("Hello, " + name)
# 使用模块
import mymodule
mymodule.greeting("Python")包
包是一种管理Python模块命名空间的形式,采用"点模块名称"。一个包里面可以包含子包、模块和子模块,使得模块和子包可以通过相同的方式被引入。
创建一个包非常简单。只需要在文件夹中添加一个 __init__.py文件即可。 __init__.py可以是空文件,也可以包含Python代码。
通过这个教程,你应该对Python中的模块有了基本的了解。模块是Python程序结构化和重用代码的关键概念。理解并合理使用模块,可以使你的Python程序更加模块化,更易于维护和扩展。
相关推荐
- 闪迪u盘低级格式化工具(闪迪u盘格式化分配单元大小)
-
闪迪U盘格式化后速度变慢的可能原因及解决方法如下:文件系统问题:格式化时选择的文件系统类型可能会影响U盘的性能。常见的文件系统类型包括FAT32、NTFS和exFAT等。如果文件系统类型不合适,可能会...
- psd文件下载(psd格式下载网站)
-
1、在photoshop中,不能通过置入的方法来加载PSD文件,因为,通过置入的方法加载PSD文件,它是以合并图层的方法把PSD文件加入,这样,就失去了PSD文件的所有图层信息。 2、在文档中想...
- 宏碁官网下载win7系统(宏碁官方系统)
-
宏基笔记本win8系统换成win7步骤:1、更改bios设置,关闭“SecureBoot”功能,启用传统的“LegacyBoot”。2、制作u启动U盘启动盘,下载win7系统安装包3、设置U盘启动...
- 如何重装系统win7旗舰版32位
-
首先下载制作一个带系统的启动u盘,然后按以下步骤安装:1、首先关闭电脑上面的杀毒软件,2、进入bios选择u盘启动。3、插入启动u盘重新启动电脑4、进入pe系统镜像环节,选择要安装的系统(32位),然...
- 应用程序发生异常0xe0000008
-
先查看一下对应的软件是不是出现了损坏,也可以重装此软件。我们还可以尝试通过修改注册表来解决。按Win+R(或者在开始菜单搜索框输入“运行”)打开运行,然后输入“regedit”回车,打开注册表恢复原来...
- 笔记本连接wifi显示无法连接网络
-
笔记本电脑连接wifi时提示无法连接到这个网络1、打开电脑“控制面板”,点击“网络连接”,选择本地连接,右键点击本地连接图标后选“属性”,在“常规”选项卡中双击“Internet协议(TCP/IP)...
- windowsc盘清理大师(c盘清理大师怎么样)
-
C盘清理大师是一款流氓软件,可不是windows10里自带。在你的电脑上出现这个软件一般情况下可以证明你使用的系统是盗版的,系统采用的是网上流传的系统镜像制作的。在网上流传这些系统镜像文件...
- realtek没声音如何设置(realtek怎么调出来)
-
你给无线连接配IP地址呗第一步:下载驱动精灵软件。第二步:安装驱动精灵软件。1、在打开的驱动软件安装窗口,确定程序安装路径后,点击:一键安装;2、正在安装。第三步:更新驱动程序。1、安装非常迅速,已经...
- 腾达路由器手机端登录入口(腾达路由器手机端登录入口在哪)
-
腾达路由器使用192.168.0.1或tendawifi.com作为登录地址。登录管理员页面的步骤:1、手机连接到腾达路由器的wifi信号;2、在手机上打开浏览器,在地址栏输入192.168.0.1后...
-
- 百度网盘app下载安装手机版(百度网盘app安卓版)
-
百度网盘没有关闭离线下载功能,可以通过以下方法进行离线下载:1、打开手机,找到手机中的百度网盘:2、打开百度网盘,找到右下角的“我的”,找到屏幕中的“离线下载”:3、点击打开离线下载,选择“新建链接任务”,然后点击“确定”:4、在新建链接页...
-
2025-12-21 03:51 off999
- 安卓虚拟机破解版(挽念虚拟机15.0破解版)
-
正盗版都是广联达公司内部出来的,破解の用来打市场,正版的用来获取利润,个人破不了1、确保你的虚拟机网路设置正确。2、如果采用的是独立无线网卡那么要确保独立网卡能被虚拟机识别,虚拟机安装了独立无线网卡...
- win7系统改中文(win7系统换中文)
-
要将Windows7系统从英文切换为中文,可以按照以下步骤进行:1.打开控制面板:点击Windows开始菜单,选择“控制面板”。2.打开区域和语言设置:在控制面板中,找到“时钟、语言和区域”或“...
- win10启动盘怎么制作(windows10如何制作启动盘)
-
要制作Win10PE启动盘,首先需要下载Win10PE镜像文件。然后,使用专业的制作工具(如Rufus或WinToUSB)将镜像文件写入U盘或DVD。接下来,将U盘或DVD插入需要启动的计算机,并在B...
- 磁盘分区win7(磁盘分区win r)
-
1操作分区比较简单,但需要严格按照步骤进行,否则可能会导致数据丢失或无法启动等问题。2首先要进入磁盘管理界面,找到新安装的硬盘,右键选择“新建简单卷”,按照步骤设置分区大小、驱动器号、文件系统等。...
欢迎 你 发表评论:
- 一周热门
-
-
抖音上好看的小姐姐,Python给你都下载了
-
全网最简单易懂!495页Python漫画教程,高清PDF版免费下载
-
Python 3.14 的 UUIDv6/v7/v8 上新,别再用 uuid4 () 啦!
-
飞牛NAS部署TVGate Docker项目,实现内网一键转发、代理、jx
-
python入门到脱坑 输入与输出—str()函数
-
宝塔面板如何添加免费waf防火墙?(宝塔面板开启https)
-
Python三目运算基础与进阶_python三目运算符判断三个变量
-
(新版)Python 分布式爬虫与 JS 逆向进阶实战吾爱分享
-
失业程序员复习python笔记——条件与循环
-
系统u盘安装(win11系统u盘安装)
-
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
