更多优质内容
请关注公众号

Python基础教程(八) Python操作文件系统和模块-阿沛IT博客

正文内容

Python基础教程(八) Python操作文件系统和模块

栏目:Python 系列:Python基础教程系列 发布时间:2019-10-30 14:56 浏览量:2917

文件系统:

 

打开文件 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引入




更多内容请关注微信公众号
zbpblog微信公众号

如果您需要转载,可以点击下方按钮可以进行复制粘贴;本站博客文章为原创,请转载时注明以下信息

张柏沛IT技术博客 > Python基础教程(八) Python操作文件系统和模块

热门推荐
推荐新闻