python之文件操作OS模块面向对象

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python之文件操作OS模块面向对象相关的知识,希望对你有一定的参考价值。

一 文件操作

1 文件系统和文件

在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以,读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作系统提供的接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件对象(写文件)。
文件是计算机中由OS管理的具有名字的存储区域,在Linux中,文件是被看做字节序列

2 python内置的打开文件的方式open读取

1 文件打开open

open(文件目录(可以是绝对路径和相对路径)[文件打开模式][文件输出缓存])
后面两项是可选参数。默认返回是一个文件对象的内存,其默认的读写模式是只读模式,
技术分享图片
可以通过赋值进行输出结果read(输出的字节数)默认是全部
技术分享图片
技术分享图片
通过参数指定读取的范围:
技术分享图片

2 文件操作的模式

技术分享图片

3 文件的其他属性

1 文件的常用操作

A seek([文件偏移量][文件指针位置])
文件指针的返回
为0表示文件的起始,为1 表示当前位置,为2表示末尾位置。
通过指定文件的指针可以重复读取文件的第一行内容,
技术分享图片
偏移量的大小表现为文件的字节数,当为正时,表示向右读取,当为负时,表示向左读取,当为0时,表示不偏移
技术分享图片
B tell()显示指针目前所处位置
技术分享图片
C close()表示关闭当前文件
技术分享图片
D closed 检查当前文件是否关闭,若为True ,则表示已关闭,若为False,则表示未关闭
技术分享图片
E name 查看文件名称
技术分享图片
F mode 查看当前文件的打开模式
技术分享图片
G flush 将当前文件的内容刷新到磁盘上,其目的是为了防止断电而保存。
技术分享图片
H next() 用于读取文件内容,每次读取一行,其指针位置不发生变化
技术分享图片

2 文件的读取

A readline()每次读取一行文件内容
技术分享图片
B readlines() 每次读取文件的所有内容
技术分享图片
C read () 指定读取文件的字节数,默认是全部读取

3 文件的写入

A write()其可以写入字符串,
技术分享图片
B writelins()用于传入多个参数
技术分享图片
技术分享图片

二 OS 模块

作用:用于将python与文件系统更加紧密连接的一种模块

1 常用os模块方法

1 目录相关目录相关

os.Chdir() 改变目录/通过文件描述改变工作目录
os.chroot() 设定当前进程的根目录
os.listdir() 列出指定目录下的所有文件名
os.Mkdir()创建指定目录,默认为一级
os.makedirs(‘x/y/z‘)
os.getcwd()获取当前目录
os.Rmdir()删除目录
os.Removedirs() 删除多级目录
os.removedirs(‘/mnt/aaa/bbb/ccc‘) 必须制定所有的目录才可以删除

2 文件相关

os.mkfifo() 创建先进先出管道(命名
os.mknod() :创建设备文件
os.Remove() 删除文件
os.Unlink( ) 删除链接
os.Rename() 文件重命名
os.rename(‘passwd‘,‘aaa‘)
os.Stat() 返回文件状态信息
os.Symlink() 创建文件链接,符号链接
In [33]: os.symlink(‘text2.txt‘,‘text2.syslink‘)
text2.syslink
os.utime() 更新文件的事件戳 updatetime
os.tmpfile() 创建并打开一个新的临时文件,打开模式是(w+b)

3 访问权限相关

os.access() 检验权限模式
In [42]: os.access(‘/tmp/text2.txt‘,0) UID 管理员的访问权限
os.Out[42]: True
In [43]: os.access(‘/tmp/text2.txt‘,100) 普通用户的访问权限
Out[43]: False
os.Chmod() 修改权限
In [44]: os.chmod(‘text2.txt‘,0640) os.chmod(‘aaa‘,0777)为四位
os.Chwon 修改属主 ,属组
In [47]: os.chown(‘text2.txt‘,1000,1000)
[[email protected] tmp]# id admin
uid=1000(admin) gid=1000(admin) 组=1000(admin)
[[email protected] tmp]# ll text2.txt
-rw-r-----. 1 admin admin 2525 11月 19 20:35 text2.txt
os.Umask() 设置默认权限模式

4 文件描述符相关

os.Open():打开一个文件,底层操作系统的open
os.Read() 较低io的读取操作
os.Write() 较低IO的写操作

5 设备文件相关

os.Mkdev() 根据指定的主设备号,次设备号创建文件

In [48]: help(os.makedev)
Help on built-in function makedev in module posix:

makedev(...)
makedev(major, minor) -> device number
Composes a raw device number from the major and minor device numbers.
(END)
os.Major() 从指定的设备获取主设备号
os.Minor() 从指定的设备获取次设备号

2 os.path模块

1 文件路径相关

In [55]: import os.path
A.os.path.Basename():路径基名
In [58]: file1=os.path.basename(‘/etc/sysconfig/netw‘)
/etc/sysconfig/network /etc/sysconfig/network-scripts/

B.os.path.irname() 路径目录名

C.os.path.join() 将路径基名和目录名整合成一个名字
In [60]: os.path.join(dir1,file1)
Out[60]: ‘/etc/sysconfig/network-scripts/‘
In [63]: for filename in os.listdir(‘/tmp‘):
....: print os.path.join(‘/tmp‘,filename)

C. os.path.splist()分割文件名和文件,返回dir和basename()元组
In [64]: os.path.split(‘/etc/sysconfig/‘)
Out[64]: (‘/etc/sysconfig‘, ‘‘)

D os.path.Splitext() 返回(filename,extension) 元组
6]: os.path.splitext(‘/tmp/‘)
Out[86]: (‘/tmp/‘, ‘‘)

2 文件信息:

A os.path.getatime() 返回文件最近一次的访问记录
B os.path.Getctime()
C os.path.Getmtime()
D os.path.Getsize() 返回文件的大小

3 判断查询类的操作

A os.path.Exists() 判断指定文件是否存在,档不存在时,以只读方式打开文件是错误的。
B os.path.Isabs() 判断指定的路径是否是绝对路径
C os.path.isdir() 判断指定路径是否为目录
D os.path.Isfiel() 判断指定文件是否为文件
E os.path.Islink() 判断时否为符号链接
F os.patj.Ismount() 是否为挂载点
G os.path.Sanefiek() 两个路径是否执行了同一个文件

三 面向对象的编程

1 编程的分类:

1 面向过程的编程
以指令为核心:围绕“正在发生什么”进行编写
面向过程:程序= 算法+ 数据结构
面向过程编程:程序具有一系列线性步骤,主体思想是代码作用于数据,以指令为核心,核心是设计算法,
2 面向函数的编程
3 面向对象的编程
面向对象编程--object oriented programming ,简称OOP,把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数
面向过程把函数继续切分称为子函数,来降低系统的复杂度。
面向对象编程(OOP)
程序 = 指令 + 数据/算法 + 数据结构
以数据为核心: 围绕“将影响谁”进行编写
面向对象编程(OOP):围绕数据以及为数据严格定义的接口来组织程序,用数据控制对代码的访问,面向数据,以及能够对这些数据采取的操作进行,代码执行过成,不能跳过数据
面向对象编程的核心概念:
所有编程语言的最终目的都是提供一种抽象方法
在机器模型(“解空间”或“方案空间”)与实际解决问题的问题模型(“问题空间”)之间,程序员必须建立一种联系
将问题空间中的元素以及他们在解空间中的标识物抽象为对象,并允许通过问题来描述问题而不是通过方案来描述问题
可以把实例(某个类的实例)想象成一种新型变量,他保存这数据,但可以对自身数据执行操作,实例可以对自身数据做操作

2 类和实例

1 类:

定义了被多个同一类型对象共享的结构和行为(数据和代码)
类是抽象的,实例是具体的,类是(概念,抽象的概念模型),类本身是不能被操作的,须有实例化的对象才能操作
类的数据和代码,及类的成员
类内部有两个核心成员:代码和数据,都叫类成员
数据:成员变量或实例变量
成员方法: 简称为方法,是操作数据的代码,用于定义如何使用成员变量,因此一个类的行为和接口是通过方法来定义的
类:将同一种具体的物事的共同特性抽想出来的表现
状态和方法组成(转换这些状态的操作组成)类
状态:数据
方法:操作

2 实例:

实例是类的具体表现形式,类存在的目的就是为了实例化。类是抽象的,实例是具体的

3 操作

1 类的定义

calss 类名(父类):
类的内容
类后面有括号的称为新式类,没有括号称为经典类。
括号里面的内容是父类的名称,程序中,所有父类都是object
技术分享图片
类的查看:
技术分享图片

2 类的数据属性

技术分享图片
当类的实例化后,类的属性是不变的
技术分享图片
类的数据属性是可变的,当在实例处修改类的数据属性时,其类本身的数据属性不变。
技术分享图片
当类的数据属性发生改变时,原本已经改变的实例的数据属性不会再次改变,而新创建的实例的数据属性会发生改变
技术分享图片

3 类的方法===函数

在类中定义的函数教方法,类的方法中,要求第一个形参必须是self,而self实际上是类实例化后的对象本身
类方法的定义
技术分享图片
类方法的调用
技术分享图片

4面向对象的三大特性

1 封装

封装实际上是把数据封装到摸个地方,以后再去调用在某处的内容或者数据
调用封装数据的方式
通过对象直接调用
其中init表示的是一个构造器,当类的实例化过程时会调用其方法,由于其是必选参数,因此在传值时必须与对应的个数相同,当然可以实例化多个对象
技术分享图片
技术分享图片
通过self在类内部对类中的数据进行调用
技术分享图片
类的实例化
技术分享图片
技术分享图片

2 继承

1 父类和子类

基类和派生类
其中父类也叫基类
子类也叫派生类
父类
技术分享图片
子类,其中没有定义类的属性和方法,只是继承了Class1 的属性
技术分享图片
子类的实例化和结果,其完全继承和父类的属性和方法:
技术分享图片

当子类中有自己的构造函数时,以子类中的构造函数为准
技术分享图片
技术分享图片

2 重写父类的构造函数

1 通过 父类名.init(self,父类参数) 进行重写构造函数
技术分享图片
2 通过super(自己类名称,self).init(形参)
优点: 不需要明确告诉父类的名称,如果父类改变,只需修改class 语句后面的继承关系即可,不用修改父类名称
技术分享图片
实例化调用
技术分享图片

多重继承
对于新式类,是广度优先
对于经典类,是深度优先
技术分享图片
对于新式类,当调用D实例时,其结果是执行D的输出,当D中为pass 占位,其继承了B的输出,当B中的结果为pass 时,其会继承C中的输出,

对于经典类,当调用D实例时,其结果是执行D的输出,当D中为pass 占位,其继承了B的输出,当B中的结果为pass 时,其会继承A中的输出,因为B继承了A,因为其是深度优先。

3 多态:

当父类和子类有相同的方法时,调用优先执行子类的方法:
技术分享图片
技术分享图片

4 新式类和经典类

python2.x 里面支持经典类和新式类
python3.x 里面仅支持新式类
经典类,其可以不写父类。
技术分享图片
新式类,其如果没有继承的父类则直接写object,必须写父类,如果有父类,则直接写父类
技术分享图片
只有新式类支持mro() 方法
技术分享图片

5 类的特殊属性

1 class.name 类的名称显示
技术分享图片
2 class.doc 类的帮助文档

3 class.base 类的父类/基类
技术分享图片
4 class.module 类的模块,当不是导入的模块的类时,其执行结果为main,当为模块导入时,其执行结果为模块名
技术分享图片

6 类的私有属性

通过在类的构造时使用self.__x=x 来 获取类的私有属性。

1 简介

默认的类的私有属性不能访问:
技术分享图片
通过将其私有属性包装成方法进行使用,其是可以访问的。
技术分享图片
通过此装饰器@property: 定义一个类方法为私有属性的名称;让用户可以直接访问, 但不能任意修改;
技术分享图片
通过其装饰器的方法进行重新定义一个接受隐藏属性的范围来进行修改其值。

@属性名.seeter: 给属性赋值时先做判断; 当属性名=value会自动调用该函数

通过deleter 方法可以使得当del 属性名, 会自动调用该函数并执行高函数下面的操作

技术分享图片

@property应用:
用于分页显示,此处传入两个值,一个值是第几页,另一个是每页的数量,通过@property 可以进行对列表的操作。

技术分享图片

2 私有属性的继承

默认的,私有属性不能直接调用,需要伪装成方法方可调用。
技术分享图片
在类中,以双下划綫开始的方法称为私有方法:私有方法不能继承。
技术分享图片

7 魔术方法format

1 通过位置符号:

其中format后面的第一个数字位置为0,第二个数字位置为1,
技术分享图片
技术分享图片
其可以使用folate类型进行格式化结果
技术分享图片
技术分享图片

2 通过匹配字典的键来得到结果

技术分享图片

3 格式化元祖的具体项

技术分享图片

4 在类中的应用:

技术分享图片
扩展:
技术分享图片

8 类方法扩展

迭代:
判断一个对象是否可迭代,看类是否有iter方法
技术分享图片
其他的方法
getitem(self,item):
用于查看某个key对应的vlaues
setitem(self,key.values) 用于当导入某个key,values时修改当前的values为指定传入的vlaues
delitem(self,key)用于通过指定键,来删除值的过程.
getslice(self,i,j) 用以查看切片的结果,传入的分别是切片的起始和结束
setslice(self,i,j,squence): 用以将切片的值修改,传入切片的起始,结束和要修改成为的字段
delslice(self,i,j): 用以将接片的结果删除
技术分享图片

以上是关于python之文件操作OS模块面向对象的主要内容,如果未能解决你的问题,请参考以下文章

Python_面向对象_os.path os路径模块

python pathlib模块(面向对象的文件系统路径)

Python之面向对象

Python 基础入门笔记———— 文件操作面向对象异常模块包

Python 基础入门笔记——— 文件操作面向对象异常模块包

Python 基础入门笔记———— 文件操作面向对象异常模块包