文件操作
文件读取
使用open(file_name,mode,encoding)
函数来进行操作
file_name
代表要打开的文件的名称(字符串格式),也可以加上文件所在的路径
mode
:打开文件的模式,可以是:只读,写入,追加
encoding
:编码格式(例如UTF-8),注意encoding需要用关键字传参
file = open('C:file_name','r',encoding = "UTF-8")
这里使用了file
接收了文件,这里file
是open()
函数的文件对象
在这里我们写入路径的时候会用到\
,而如果你想要他作为字符出现就需要\\
,十分的麻烦
我们可以利用python的原始字符串(raw string),只要在字符串前加上r
或者R
,就可以实现\
作为字符
file = open(r'C:\Users\17591\Desktop\CODES\TEXT\py_open.txt','r',encoding = "UTF-8")
p = file.readlines()
print(p)
三种模式
只读:r
用只读模式打开文件,文件的指针会放在文件的开头
写入:w
打开文件并只用于写入,如果这个文件存在就打开文件,并且从头开始编辑,之前的内容全部删除,如果不存在就创建一个文件
追加:a
如果文件存在则在文件后面写入新内容,不存在则创建新文件
读操作相关方法
file.read(num)
,读取文件中num长度,如果不传入则读取全部文件
每次read会记录下读到的位置,下一次read会接着上一次的位置往后
file = open(r'C:\Users\17591\Desktop\CODES\TEXT\py_open.txt','r',encoding = "UTF-8")
print(file.read(5))
print(file.read())
# result
abcde
fghigklmnopqrstuvwxyz
file.readlines()
按行读取整个文件中的内容,并且返回一个列表
这个方法也会和read相同,从上一次的位置继续,并且可以和read联动起来
并且该方法可以读取到换行符
file.readline()
一行行的读取,一次读一行,该方法不会读取到换行符
for
循环在读取文件时会按行循环
file.close()
关闭文件对象,关闭对文件的占用
with open(file_name,mode) as f:
f.readlines()
逐行操作
with open语法可以在操作完成之后自动关闭文件
写入操作相关方法
file.write(...)
文件写入操作
在python中运行文件时,write会把写入操作的内容先载入缓冲区(存在于python程序的内存中)
file.flush()
内容刷新操作
调用flush之后,就会把缓冲区的写入内容真正吸入文件中,并且file.close()
操作自带了file.flush
的功能
追加操作相关方法
方法与写入操作相同,只需要把open的模式改为a
异常
捕获异常
在python中可以实现捕获异常,如果某一行命令出现了bug,可以自动替换为另一行代码
try:
可能错误的代码
except:
出现错误时运行的代码
并且对于异常捕获还可以进行指定错误种类
try:
可能错误的代码
except error_type as e:
出现错误时运行的代码
如果想要通过第二种语法来捕获全部异常
try:
可能错误的代码
except Exception as e:
出现错误时运行的代码
同时也可以同时捕获多种错误,只需要把他们存储到元组当中
try:
可能错误的代码
except (error_type1,error_type2):
出现错误时运行的代码
同时也可以再加上没有异常时候运行的代码
try:
可能错误代码
except error_tpye as e:
出现错误运行的代码
else:
print('无错误')
同时也可以加上无论有无异常都要执行的代码
try:
...
except error_typq as e:
...
else:
...
finally:
...
异常可以通过函数等的嵌套进行传递
模块
模块的导入语法
[from 模块名] import [模块/类/变量/函数/*] [as 别名]
import运用
# 导入模块
import 模块名
import 模块名1,模块名2
# 使用模块
模块名.功能()
例如:
import time
time.sleep(1)
以上便是导入整个模块,但是也可以导入模块中的某一项
# 导入
from 模块名 import 功能名
# 使用
功能名()
例如:
from time import sleep
sleep(1)
# 导入模块中所有方法
from 模块名 import *
# 使用
功能名()
例如
from time import *
sleep(1)
和直接import的区别只在于使用方法时的格式不同
as设置别名
# 导入并设置别名
import 模块名 as 别名
from 模块名 import 功能 as 别名
自定义模块
制作模块只需要新建一个.py文件,在其中写入函数等,然后在另外一个文件直接import该文件的名称就可以了。
如果调用的模块中有相同的名字的函数(没有直接使用import的时候),那么就会出现后面引用的模块的函数覆盖掉了前面引用的模块的函数
如果在自定义的模块中调用了函数,那么引用模块的时候会把该函数执行
使用以下语句,可以使在主函数引用模块的时候不会触发代码,但是在运行该模块的时候会触发
if __name__ == '__main__'
...
__all__
存储的是列表,当写上__all__
并且使用from ... import *
的时候,只有存储到__all__
里面的函数会被导入
__all__ = ['func1']
def func1():
...
def func2():
...
python包
是一个文件夹,里面存放着多种模块,并且有__init__.py
文件,本质上还是模块。
__init__.py
是一个空的文件,所以在vscode中创建包也可以自己直接创建,不需要pycharm的创建功能
在使用的时候,也是直接import 包名.模块名
使用的时候就是包名.模块名.目标
__all__
在包中也有运用,可以写到__init__.py
文件中,同样也是作为一个列表,写入指定的模块名,当使用from ... import *
的时候,不在列表中的模块不会被引用
安装第三方包
只需要在cmd界面通过pip install 包名
进行安装
也可以详细加上网址,来实现通过国内网站进行安装pip install -i 网址 包名