Python OS模块和文件处理

文件处理

1. 打开和关闭文件

在这里插入图片描述

打开文件

fo = open("foo.txt", "w")   
#你必须先用Python内置的open()函数打开一个文件,创建一个file对象,相关的方法才可以调用它进行读写。
open参数
file_name是一个包含了你要访问的文件名的字符串值。
access_mode决定了打开文件的模式:只读,写入,追加等。所有可取值见如下的完全列表,这个参数是非强制的,默认文件访问模式为只读®。
buffering如果buffering的值被设为0,就不会有寄存;如果buffering的值取1,访问文件时会寄存行;如果将buffering的值设为大于1的整数,表明了这就是的寄存区的缓冲大小;如果取负值,寄存区的缓冲大小则为系统默认。
打开文件模式
t文本模式 (默认)。
x写模式,新建一个文件,如果该文件已存在则会报错。
b二进制模式。
+打开一个文件进行更新(可读可写)。
U通用换行模式(不推荐)。
r以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
rb以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。
r+打开一个文件用于读写。文件指针将会放在文件的开头。
rb+以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。
w打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。
w+打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb+以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。
a打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

关闭文件

fo = open("foo.txt", "w") 
fo.close()  
#File 对象的 close()方法刷新缓冲区里任何还没写入的信息,并关闭该文件,这之后便不能再进行写入。当一个文件对象的引用被重新指定给另一个文件时,Python 会关闭之前的文件。

2. 读&写

读文件

stream = open(r' C:\p1\aa. txt’)
container = stream. read()
print (container)
result = stream. readable() # 判断是否可以读取True
False
print (result)

注意:如果传递的path/ filename有误,则会报错: FileNotFoundError

如果使用readline,可以通过循环的方式来获得文本的全部信息

while True:
	line = stream.readline
	print (line)
	if not 1ine:
		break

readlines默认在没行的后面加上换行符,并以列表的形式输出

lines = stream.readlines ()
print(lines)

在这里插入图片描述

读取二进制文件,比如图片或者视频

stream = open(r'C:\p1\girl.jpg' ,'rb’)
cntainer = stream.read()
print(container)

在这里插入图片描述

写文件

result = stream. write(' hello' )
# print (result) 
stream. write(龙五’)
stream. writelines
([’赌神高进’,’赌侠小刀’,’赌圣周星星’])
stream. close()
#释放资源
file常用函数
file.close()关闭文件。关闭后文件不能再进行读写操作。
file.flush()刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入。
file.fileno()返回一个整型的文件描述符(file descriptor FD 整型), 可以用在如os模块的read方法等一些底层操作上。
file.isatty()如果文件连接到一个终端设备返回 True,否则返回 False。
file.next()返回文件下一行。
file.read([size])从文件读取指定的字节数,如果未给定或为负则读取所有。
file.readline([size])读取整行,包括 “\n” 字符。
file.readlines([sizeint])读取所有行并返回列表,若给定sizeint>0,则是设置一次读多少字节,这是为了减轻读取压力。
file.seek(offset[, whence])设置文件当前位置
file.tell()返回文件当前位置。
file.truncate([size])截取文件,截取的字节通过size指定,默认为当前文件位置。
file.write(str)将字符串写入文件,返回的是写入的字符长度。
file.writelines(sequence)向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符。

在这里插入图片描述

with as 语句的基本语法格式为:
with 表达式 [as target]:
    代码块

此格式中,用 [] 括起来的部分可以使用,也可以省略。其中,target 参数用于指定一个变量,该语句会将 expression 指定的结果保存到该变量中。with as 语句中的代码块如果不想执行任何语句,可以直接使用 pass 语句代替。
with as可以打开多个文件

在这里插入图片描述在这里插入图片描述

3. 文件定位

tell()方法告诉你文件内的当前位置, 换句话说,下一次的读写会发生在文件开头这么多字节之后。

seek(offset [,from])方法改变当前文件的位置。Offset变量表示要移动的字节数。From变量指定开始移动字节的参考位置。

如果from被设为0,这意味着将文件的开头作为移动字节的参考位置。如果设为1,则使用当前的位置作为参考位置。如果它被设为2,那么该文件的末尾将作为参考位置。

在这里插入图片描述

在这里插入图片描述在这里插入图片描述

在这里插入图片描述

OS模块

1. OS模块简介:

OS模块是Python标准库中的一个用于访问操作系统功能的模块,OS模块提供了一种可移植的方法使用操作系统的功能。使用OS模块中提供的接口,可以实现跨平台访问。但是在OS模块中的接口并不是所有平台都通用,有些接口的实现是依靠特定平台下的接口的。在OS模块中提供了一系列访问操作系统功能的接口,便于编写跨平台的应用。

2. OS模块常用函数

os.path方法
os.path.abspath(path)返回绝对路径
os.path.basename(path)返回文件名
os.path.commonprefix(list)返回list(多个路径)中,所有path共有的最长的路径
os.path.dirname(path)返回文件路径
os.path.exists(path)如果路径 path 存在,返回 True;如果路径 path 不存在,返回 False。
os.path.lexists路径存在则返回True,路径损坏也返回True
os.path.expanduser(path)把path中包含的""和"user"转换成用户目录
os.path.expandvars(path)根据环境变量的值替换path中包含的" n a m e " 和 " name"和" name""{name}"
os.path.getatime(path)返回最近访问时间(浮点型秒数)
os.path.getmtime(path)返回最近文件修改时间
os.path.getctime(path)返回文件 path 创建时间
os.path.getsize(path)返回文件大小,如果文件不存在就返回错误
os.path.isabs(path)判断是否为绝对路径
os.path.isfile(path)判断路径是否为文件
os.path.isdir(path)判断路径是否为目录
os.path.islink(path)判断路径是否为链接
os.path.ismount(path)判断路径是否为挂载点
os.path.join(path1[, path2[, …]])把目录和文件名合成一个路径
os.path.normcase(path)转换path的大小写和斜杠
os.path.normpath(path)规范path字符串形式
os.path.realpath(path)返回path的真实路径
os.path.relpath(path[, start])从start开始计算相对路径
os.path.samefile(path1, path2)判断目录或文件是否相同
os.path.sameopenfile(fp1, fp2)判断fp1和fp2是否指向同一文件
os.path.samestat(stat1, stat2)判断stat tuple stat1和stat2是否指向同一个文件
os.path.split(path)把路径分割成 dirname 和 basename,返回一个元组
os.path.splitdrive(path)一般用在 windows 下,返回驱动器名和路径组成的元组
os.path.splitext(path)分割路径,返回路径名和文件扩展名的元组
os.path.splitunc(path)把路径分割为加载点与文件
os.path.walk(path, visit, arg)遍历path,进入每个目录都调用visit函数,visit函数必须有3个参数(arg, dirname, names),dirname表示当前目录的目录名,names代表当前目录下的所有文件名,args则为walk的第三个参数
os.path.supports_unicode_filenames设置是否支持unicode路径名
print( os.path.getatime(file) )   # 输出最近访问时间
print( os.path.getctime(file) )   # 输出文件创建时间
print( os.path.getmtime(file) )   # 输出最近修改时间
print( time.gmtime(os.path.getmtime(file)) )  # 以struct_time形式输出最近修改时间
print( os.path.getsize(file) )   # 输出文件大小(字节为单位)
print( os.path.abspath(file) )   # 输出绝对路径
print( os.path.normpath(file) )  # 规范path字符串形式
OS常用函数
os.chdir(path)改变当前工作目录
os.chmod(path, mode)更改权限
os.getcwd()返回当前工作目录
os.listdir(path)返回path指定的文件夹包含的文件或文件夹的名字的列表。
os.mkdir(path[, mode])以数字mode的mode创建一个名为path的文件夹.默认的 mode 是 0777 (八进制)。
os.remove(path)删除路径为path的文件。如果path 是一个文件夹,将抛出OSError; 查看下面的rmdir()删除一个 directory。
os.rmdir(path)删除path指定的空目录,如果目录非空,则抛出一个OSError异常。
os.path 模块获取文件的属性信息。
OS其他函数
os.access(path, mode)检验权限模式
os.chdir(path)改变当前工作目录
os.chflags(path, flags)设置路径的标记为数字标记
os.chmod(path, mode)更改权限
os.chown(path, uid, gid)更改文件所有者
os.chroot(path)改变当前进程的根目录
os.close(fd)关闭文件描述符 fd
os.closerange(fd_low, fd_high)关闭所有文件描述符,从 fd_low (包含) 到 fd_high (不包含), 错误会忽略
os.dup(fd)复制文件描述符 fd
os.dup2(fd, fd2)将一个文件描述符 fd 复制到另一个 fd2
os.fchdir(fd)通过文件描述符改变当前工作目录
os.fchmod(fd, mode)改变一个文件的访问权限,该文件由参数fd指定,参数mode是Unix下的文件访问权限。
os.fchown(fd, uid, gid)修改一个文件的所有权,这个函数修改一个文件的用户ID和用户组ID,该文件由文件描述符fd指定。
os.fdatasync(fd)强制将文件写入磁盘,该文件由文件描述符fd指定,但是不强制更新文件的状态信息。
os.fdopen(fd[, mode[, bufsize]])通过文件描述符 fd 创建一个文件对象,并返回这个文件对象
os.fpathconf(fd, name)返回一个打开的文件的系统配置信息。name为检索的系统配置的值,它也许是一个定义系统值的字符串,这些名字在很多标准中指定(POSIX.1, Unix 95, Unix 98, 和其它)。
os.fstat(fd)返回文件描述符fd的状态,像stat()。
os.fstatvfs(fd)返回包含文件描述符fd的文件的文件系统的信息,像 statvfs()
os.fsync(fd)强制将文件描述符为fd的文件写入硬盘。
os.ftruncate(fd, length)裁剪文件描述符fd对应的文件, 所以它最大不能超过文件大小。
os.getcwd()返回当前工作目录
os.getcwdu()返回一个当前工作目录的Unicode对象
os.isatty(fd)如果文件描述符fd是打开的,同时与tty(-like)设备相连,则返回true, 否则False。
os.lchflags(path, flags)设置路径的标记为数字标记,类似 chflags(),但是没有软链接
os.lchmod(path, mode)修改连接文件权限
os.lchown(path, uid, gid)更改文件所有者,类似 chown,但是不追踪链接。
os.link(src, dst)创建硬链接,名为参数 dst,指向参数 src
os.listdir(path)返回path指定的文件夹包含的文件或文件夹的名字的列表。
os.lseek(fd, pos, how)设置文件描述符 fd当前位置为pos, how方式修改: SEEK_SET 或者 0 设置从文件开始的计算的pos; SEEK_CUR或者 1 则从当前位置计算; os.SEEK_END或者2则从文件尾部开始. 在unix,Windows中有效
os.lstat(path)像stat(),但是没有软链接
os.major(device)从原始的设备号中提取设备major号码 (使用stat中的st_dev或者st_rdev field)。
os.makedev(major, minor)以major和minor设备号组成一个原始设备号
os.makedirs(path[, mode])递归文件夹创建函数。像mkdir(), 但创建的所有intermediate-level文件夹需要包含子文件夹。
os.minor(device)从原始的设备号中提取设备minor号码 (使用stat中的st_dev或者st_rdev field )。
os.mkdir(path[, mode])以数字mode的mode创建一个名为path的文件夹.默认的 mode 是 0777 (八进制)。
os.mkfifo(path[, mode])创建命名管道,mode 为数字,默认为 0666 (八进制)
os.mknod(filename[, mode=0600, device])创建一个名为filename文件系统节点(文件,设备特别文件或者命名pipe)。
os.open(file, flags[, mode])打开一个文件,并且设置需要的打开选项,mode参数是可选的
os.openpty()打开一个新的伪终端对。返回 pty 和 tty的文件描述符。
os.pathconf(path, name)返回相关文件的系统配置信息。
os.pipe()创建一个管道. 返回一对文件描述符(r, w) 分别为读和写
os.popen(command[, mode[, bufsize]])从一个 command 打开一个管道
os.read(fd, n)从文件描述符 fd 中读取最多 n 个字节,返回包含读取字节的字符串,文件描述符 fd对应文件已达到结尾, 返回一个空字符串。
os.readlink(path)返回软链接所指向的文件
os.remove(path)删除路径为path的文件。如果path 是一个文件夹,将抛出OSError; 查看下面的rmdir()删除一个 directory。
os.removedirs(path)递归删除目录。
os.rename(src, dst)重命名文件或目录,从 src 到 dst
os.renames(old, new)递归地对目录进行更名,也可以对文件进行更名。
os.rmdir(path)删除path指定的空目录,如果目录非空,则抛出一个OSError异常。
os.stat(path)获取path指定的路径的信息,功能等同于C API中的stat()系统调用。
os.stat_float_times([newvalue])决定stat_result是否以float对象显示时间戳
os.statvfs(path)获取指定路径的文件系统统计信息
os.symlink(src, dst)创建一个软链接
os.tcgetpgrp(fd)返回与终端fd(一个由os.open()返回的打开的文件描述符)关联的进程组
os.tcsetpgrp(fd, pg)设置与终端fd(一个由os.open()返回的打开的文件描述符)关联的进程组为pg。
os.tempnam([dir[, prefix]])返回唯一的路径名用于创建临时文件。
os.tmpfile()返回一个打开的模式为(w+b)的文件对象 .这文件对象没有文件夹入口,没有文件描述符,将会自动删除。
os.tmpnam()为创建一个临时文件返回一个唯一的路径
os.ttyname(fd)返回一个字符串,它表示与文件描述符fd 关联的终端设备。如果fd 没有与终端设备关联,则引发一个异常。
os.unlink(path)删除文件路径
os.utime(path, times)返回指定的path文件的访问和修改的时间。
os.walk(top[, topdown=True[, οnerrοr=None[, followlinks=False]]])输出在文件夹中的文件名通过在树中游走,向上或者向下。
os.write(fd, str)写入字符串到文件描述符 fd中. 返回实际写入的字符串长度
os.path 模块获取文件的属性信息。
os.remove()          删除文件 
os.unlink()          删除文件 
os.rename()          重命名文件 
os.listdir()         列出指定目录下所有文件 
os.chdir()           改变当前工作目录
os.getcwd()          获取当前文件路径
os.mkdir()           新建目录
os.rmdir()           删除空目录(删除非空目录, 使用shutil.rmtree())
os.makedirs()        创建多级目录
os.removedirs()      删除多级目录
os.stat(file)        获取文件属性
os.chmod(file)       修改文件权限
os.utime(file)       修改文件时间戳
os.name(file)        获取操作系统标识
os.system()          执行操作系统命令
os.execvp()          启动一个新进程
os.fork()            获取父进程ID,在子进程返回中返回0
os.execvp()          执行外部程序脚本(Uinx)
os.spawn()           执行外部程序脚本(Windows)
os.access(path, mode) 判断文件权限(详细参考cnblogs)
os.wait() 
os.path模块:
os.path.split(filename)                    将文件路径和文件名分割(会将最后一个目录作为文件名而分离)
os.path.splitext(filename)                 将文件路径和文件扩展名分割成一个元组
os.path.dirname(filename)                  返回文件路径的目录部分
os.path.basename(filename)                 返回文件路径的文件名部分
os.path.join(dirname,basename)             将文件路径和文件名凑成完整文件路径
os.path.abspath(name)                      获得绝对路径
os.path.splitunc(path)                     把路径分割为挂载点和文件名
os.path.normpath(path)                     规范path字符串形式
os.path.exists()                           判断文件或目录是否存在
os.path.isabs()                            如果path是绝对路径,返回True
os.path.realpath(path)                     返回path的真实路径
os.path.relpath(path[, start])             从start开始计算相对路径 
os.path.normcase(path)                     转换path的大小写和斜杠
os.path.isdir()                            判断name是不是一个目录,name不是目录就返回false
os.path.isfile()                           判断name是不是一个文件,不存在返回false
os.path.islink()                           判断文件是否连接文件,返回boolean
os.path.ismount()                          指定路径是否存在且为一个挂载点,返回boolean
os.path.samefile()                         是否相同路径的文件,返回boolean
os.path.getatime()                         返回最近访问时间 浮点型
os.path.getmtime()                         返回上一次修改时间 浮点型
os.path.getctime()                         返回文件创建时间 浮点型
os.path.getsize()                          返回文件大小 字节单位
os.path.commonprefix(list)                 返回list(多个路径)中,所有path共有的最长的路径
os.path.lexists                            路径存在则返回True,路径损坏也返回True
os.path.expanduser(path)                   把path中包含的”~”和”~user”转换成用户目录
os.path.expandvars(path)                   根据环境变量的值替换path中包含的”$name”和”${name}”
os.path.sameopenfile(fp1, fp2)             判断fp1和fp2是否指向同一文件
os.path.samestat(stat1, stat2)             判断stat tuple stat1和stat2是否指向同一个文件
os.path.splitdrive(path)                   一般用在windows下,返回驱动器名和路径组成的元组
os.path.walk(path, visit, arg)             遍历path,给每个path执行一个函数详细见手册
os.path.supports_unicode_filenames()       设置是否支持unicode路径名

3. OS模块常用方法实战

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

在这里插入图片描述

4. 例题练习

1. 在当前目录新建目录img, 里面包含多个文件,
	文件名各不相同(X4G5.png)
2. 将当前img目录所有以.png结尾的后缀名改为.jpg

在这里插入图片描述在这里插入图片描述

python中执行shell命令

在这里插入图片描述

生成100个MAC地址并写入文件中,MAC地址前6位(16进制)为01-AF-3B
01-AF-3B-xx-xx-xx
-xx
01-AF-3B-xx
-xx
01-AF-3B-xx-xx
-xx
01-AF-3B-xx-xx-xx
解题思路:
先生成16进制数的序列
再从序列中随机取两个数作为一个元素
循环取三次,再以-连接,一个地址就生成了
最后循环100次这个地址生成函数

在这里插入图片描述在这里插入图片描述

 1. 生成一个大文件ips.txt,要求1200行,每行随机为172.25.254.0/24段的ip;
 2. 读取ips.txt文件统计这个文件中ip出现频率排前10的ip;
 解题思路:
 先生成这个网段的所有IP,用字符串连接起来
 随机取一个IP写入指定文件,
 循环1200次
 最后进行用字典的形式统计,key值为IP,value值为出现次数

在这里插入图片描述在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值