文件系统:
打开文件 open()
返回文件对象
两参,一个是文件路径,一个是打开模式
r 只读,默认是这个模式
w 写入,打开时会覆盖所有内容
x 写入模式,但文件已存在会报错
a 写入,追加写入
b 以二进制模式打开
t 以文本模式打开,默认是这个模式
+ 可读可写模式
如果需要指定文件的字符集可以使用 encoding 参数。
默认打开模式是rt
f=open("1.txt")
文件操作:
f.close()
f.read(size) size按字符计算,不传参则获取所有内容
f.seek(offset[,from]) 调节指针,from为0,1,2,是文件开头、当前位置和结尾位置,第一参是偏移量
f.tell() 返回文件指针位置
f.readline() 一行一行的读取,可以配合循环
f.readlines() 返回一个列表,列表中包含文件所有行,一行是列表中的一个元素
f.write() 写入,返回写入的字符数
f.writelines() 可以传入一个序列,但是序列里的元素必须是字符串。不是按行写入哦!
使用list(f)可将文件转为列表,每行作为列表的每个元素
直接遍历文件对象,也可以实现按行输出文件
for line in f :
print(f)
操作文件系统的模块os
import os
然后这个模块他有以下方法
os.getcwd() 返回当前工作目录
os.chdir(path) 改变工作路径,相当于Linux的cd
os.listdir(path) 列出该目录所有的文件,返回列表
os.mkdir(path) 创建单层目录
os.mkdirs(path) 递归创建目录
os.remove(path) 干掉一个文件
os.rmdir(path) 干掉单层目录
os.removedirs(path) 递归干掉目录,但是目录要非空
rename(old,new) 重命名
system(command) 运行系统的shell命令
os.path的方法,请自动在下面的方法前添加os.path.
basename(path) 只返回文件名
dirname(path)
join(p1,p2,p3) 将多个路径连接起来,p1/p2/p3 如果含有盘符名称,请自行加上/
如:
join("C:/","programData","1.txt")
split(path) 和join相反
splitext(path) 分离扩展名,返回list
getsize(path) 单位是字节
getatime()/getctime()/getmtime()
exists(path) 判断路径是否存在
isdir()
isfile()
islink()
ismount() 判断是否是挂载点
samefile(path1,path2) 判断两个路径是否指向同一个文件
如何将列表、集合、字典、元祖存到文件。
可以使用pickle模块(pickle,泡菜之意,所以我一般会把它叫做泡菜模块)
他可以将上面这些类型转化为二进制数据并存入文件中
import pickle
list1=[1,"zbp",{"sex":"m","age":21}]
f=open("my_list.pkl","wb") #文件后缀无所谓,但规范的是pkl,而且一定要以b模式打开
pickle.dump(list1,f) #写入
f.close()
读取:
f=open("my_list.pkl","rb") #以二进制的形式打开
list1=pickle.load(f)
f.close()
使用with打开文件,好处是它会自动帮你关闭句柄:
with open("my_list.pkl","rb") as f:
list1=pickle.load(f)
这样就不用关闭句柄,他会自动帮你关
模块:模块就是一个py文件,里面有很多函数,变量 我们可以引入一个模块来使用里面的方法
引入一个模块
import 文件名
文件名中不含后缀
如果是自定义模块,那么这个模块要放在当前运行脚本的同一目录下才能成功引入。
比如
import abc
如果要使用abc中的函数hello(),不可以直接
hello()
而是要这要调用:
abc.hello()
如果只想调用某一个模块的一个或者多个函数,可以这样
from abc import hello,hi
这里引入了abc的两个函数
还可以起别名:
import abcdefghij as aj
总结一下引入模块的3中方式:
1.import 模块名
2.from 模块名 import 函数/类
3.import 模块名 as 别名
if __name__ == '__main__'的作用:
是这样的,如果有一个模块叫做abc,有一个引入abc模块的文件叫做a
在abc文件中print(__name__)
那么当你运行abc.py的时候,会输出'__main__',表示这个文件是作为主模块在运行
而当你运行a文件的时候,abc文件中的print(__name__)会输出"abc"这个模块名,表示这个文件是作为被引用的模块在其他文件中运行
那么if __name__ == '__main__'的作用是,有时候,我们写好一个模块,想要测试里面的类或者函数,就可以在
这个模块中这样写,比如:
# abc.py :
def hello():
print("hello!")
if __name__=='__main__' : #用于测试
hello()
那么直接运行abc.py,他就会运行hello()函数来测试这个函数是否管用
而在a.py中,这段测试代码就不会运行
搜索路径:
pthyon导入模块的时候,会从一个特定的搜索路径中找是否存在这个模块文件
而这个搜索路径是一个列表,他存在sys.path中。
我们查看一下sys.path:
import sys
sys.path
也就是说,你将文件放在sys.path指定的目录中都可以直接import到
你也可以自定义添加搜索路径:
sys.path.append(r"C:桌面的路径")
这样你就可以import引入你桌面的python文件
包(package):
一个包就是专门用来存放自定义模块的自定义的目录
创建一个包,如下:
1.创建一个目录,目录名就是包名;
2.在该目录中创建一个__init__.py,这个文件可以为空(必须创建)
3.在这个目录中放模块即可
第二步创建一个__init__.py是为了告诉pthyon这个目录是一个包
如何引入包里面的模块:
假如有一个包是m1,在a.py中我要引入这个包中的abc模块,此时a.py和m1要在同一个目录
import m1.abc
m1.abc.hello()
即可
或者
from m1.abc import hello
hello()
若m1和a.py不在同一个目录,则要使用sys.path.append()添加搜索路径再引入
总结:模块是文件,包是目录,可以通过import引入