一.常见相关引用模块
import os: 用于目录操作如获取路径等功能
import re:用于查找匹配等
import shutil:用于目录复制移动等
import zipfile,tarfile: 用于压缩和解压缩
import time:用于获取时间相关功能
import stat:用于权限设置等功能
import logging:用于日志记录等功能
二.目录相关
引:https://www.runoob.com/python/os-file-methods.html
os.chdir(path) 改变当前工作目录
os.chmod(path, mode)更改权限
os.getcwd()返回当前工作目录
os.listdir(path)返回path指定的文件夹包含的文件或文件夹的名字的列表。
os.mkdir(path[, mode])创建单个文件夹,即父目录不存在则不能创建
os.mkdirs(path[, mode])创建父子文件夹,即父目录不存在则一起创建
import os
os.mkdir('d:\123\test')#123不存在则不会创建test
os.mkdirs('d:\123\test')#123不存在则连123都一起创建
os.rmdir(path)删除path指定的空目录,如果目录非空,则抛出一个OSError异常。
os.rename(src, dst)重命名文件或目录,从 src 到 dst
os.path.abspath(path) 返回绝对路径
os.path.basename(path) 返回文件名
os.path.dirname(path) 返回文件路径
os.path.exists(path) 如果路径 path 存在,返回 True;如果路径 path 不存在,返回 False。
os.path.isdir(path) 判断路径是否为目录,也可以用来判断路径是否存在
os.path.exists(path) 判断路径是否存在
os.path.islink(path) 判断路径是否为链接
os.path.abspath(path) 返回绝对路径
os.path.dirname(path) 返回文件路径
os.path.join(path1[, path2[, …]]) 把目录和文件名合成一个路径
import os
path=r'd:\123'
file1='test.txt'
print(os.path.join(path,file1))#'d:\123\test.txt'
os.path.split(path) 把路径分割成 dirname 和 basename,返回一个元组
os.path.splitext(path) 分割路径,返回路径名和文件扩展名的元组
path=r'd:\123\test.txt'
print(os.path.split(path))#('d:\\123', 'test.txt')
print(os.path.splitext(path))#('d:\\123\\test', '.txt')
os.path.walk(path, visit, arg) 遍历path,进入每个目录都调用visit函数,visit函数必须有3个参数(arg, dirname, names),dirname表示当前目录的目录名,names代表当前目录下的所有文件名,args则为walk的第三个参数
import os
path='指定一个文件夹'
for root,dirs,files in os.walk(path):
for name in files:
print(name) #打印所有文件名
for folder in dirs:
print(folder) #打印所有文件夹名
shutil.rmtree(目标目录):可以递归删除目录下的目录及文件。
shutil.copy(“oldfile”,“newfile”) 复制文件夹: oldfile只能是文件夹,newfile可以是文件,也可以是目标目录
shutil.copytree(“olddir”,“newdir”) olddir和newdir都只能是目录,且newdir必须不存在
shutil.move(“oldpos”,“newpos”) 移动文件(目录)
三.文件相关
引:https://www.runoob.com/python3/python3-file-methods.html
os.path.isfile(path) 判断路径是否为文件
os.path.samefile(path1, path2) 判断目录或文件是否相同
os.remove(path)删除一个文件
with open(“test.txt”,w) as f: 直接打开一个文件,如果文件不存在则创建文件
关于open 模式:
open(file, mode=‘r’, buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
参数说明:
file: 必需,文件路径(相对或者绝对路径)。
mode: 可选,文件打开模式
buffering: 设置缓冲
encoding: 一般使用utf8
errors: 报错级别
newline: 区分换行符
closefd: 传入的file参数类型
opener:
os.stat()函数可以获取文件的属性,该函数会返回一个和系统平台有关的stat_result对象,
具备一组可访问的属性,可以通过 stat_result.attribute 这样的格式来访问各个属性的值。
字 段 | 描 述 |
---|---|
st_mode | inode 保护模式 |
st_ino | inode节点号 |
st_dev | inode驻留的设备 |
st_nlink | inode的链接数 |
st_uid | 所有者的用户 ID |
st_gid | 所有者的组 ID |
st_size | 普通文件以字节为单位的大小,包含等待某些特殊文件的数据 |
st_atime | 上次访问的时间 |
st_mtime | 最后一次修改的时间 |
st_ctime | 由操作系统报告的 ctime。在某些系统上(如 UNIX)是最新的元数据更改的时间,在其他系统上(如 Windows)是创建时间 |
常见模式
模式 | 描述 |
---|---|
t | 文本模式 (默认)。 |
x | 写模式,新建一个文件,如果该文件已存在则会报错。 |
b | 二进制模式。 |
+ | 打开一个文件进行更新(可读可写)。 |
U | 通用换行模式(Python 3 不支持)。 |
r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。 |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。 |
w | 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 |
w+ | 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
file对象的常见函数
1
file.close()
关闭文件。关闭后文件不能再进行读写操作。
2
file.flush()
刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入。
3
file.fileno()
返回一个整型的文件描述符(file descriptor FD 整型), 可以用在如os模块的read方法等一些底层操作上。
4
file.isatty()
如果文件连接到一个终端设备返回 True,否则返回 False。
5
file.next()
Python 3 中的 File 对象不支持 next() 方法。
返回文件下一行。
6
file.read([size])
从文件读取指定的字节数,如果未给定或为负则读取所有。
7
file.readline([size])
读取整行,包括 “\n” 字符。
8
file.readlines([sizeint])
读取所有行并返回列表,若给定sizeint>0,返回总和大约为sizeint字节的行, 实际读取值可能比 sizeint 较大, 因为需要填充缓冲区。
9
file.seek(offset[, whence])
移动文件读取指针到指定位置
10
file.tell()
返回文件当前位置。
11
file.truncate([size])
从文件的首行首字符开始截断,截断文件为 size 个字符,无 size 表示从当前位置截断;截断之后后面的所有字符被删除,其中 windows 系统下的换行代表2个字符大小。
12
file.write(str)
将字符串写入文件,返回的是写入的字符长度。
13
file.writelines(sequence)
向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符。
shutil.copyfile(文件1,文件2):不用打开文件,直接用文件名进行覆盖copy。
shutil.copymode(文件1,文件2):只拷贝权限,内容组,用户,其余均不变。
shutil.copystat(文件1,文件):只拷贝了权限。
压缩和解压缩文件
import zipfile
# 压缩
z = zipfile.ZipFile('laxi.zip', 'w')
# 这里的第二个参数用r表示是读取zip文件,w是创建一个zip文件
z.write(r'c:\test')
#往压缩包里面放东西,要具体到目录或文件名
z.write(r'd:\data.data')
z.close()
# close() 是必须调用的!
# 解压
z = zipfile.ZipFile('laxi.zip', 'r')
z.extractall()
z.close()
import tarfile
# 压缩
tar = tarfile.open('your.tar','w')
tar.add('/Users/wupeiqi/PycharmProjects/bbs2.zip', arcname='bbs2.zip')
tar.add('/Users/wupeiqi/PycharmProjects/cmdb.zip', arcname='cmdb.zip')
tar.close()
# 解压
tar = tarfile.open('your.tar','r')
tar.extractall() # 可设置解压地址
tar.close()
os.open(file, flags[, mode])
参数
file – 要打开的文件
flags – 该参数可以是以下选项,多个使用 “|” 隔开:
os.O_RDONLY: 以只读的方式打开
os.O_WRONLY: 以只写的方式打开
os.O_RDWR : 以读写的方式打开
os.O_NONBLOCK: 打开时不阻塞
os.O_APPEND: 以追加的方式打开
os.O_CREAT: 创建并打开一个新文件
os.O_TRUNC: 打开一个文件并截断它的长度为零(必须有写权限)
os.O_EXCL: 如果指定的文件存在,返回错误
os.O_SHLOCK: 自动获取共享锁
os.O_EXLOCK: 自动获取独立锁
os.O_DIRECT: 消除或减少缓存效果
os.O_FSYNC : 同步写入
os.O_NOFOLLOW: 不追踪软链接
mode – 类似 chmod()。
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import os, sys
# 打开文件
fd = os.open( "foo.txt", os.O_RDWR|os.O_CREAT )
# 写入字符串
os.write(fd, "This is test")
# 关闭文件
os.close( fd )
print "关闭文件成功!!"
os.chmod()方法
此方法通过数值模式更新路径或文件权限。该模式可采取下列值或按位或运算组合之一:
stat.S_ISUID: Set user ID on execution.
stat.S_ISGID: Set group ID on execution.
stat.S_ENFMT: Record locking enforced.
stat.S_ISVTX: Save text image after execution.
stat.S_IREAD: Read by owner.
stat.S_IWRITE: Write by owner.
stat.S_IEXEC: Execute by owner.
stat.S_IRWXU: Read, write, and execute by owner.
stat.S_IRUSR: Read by owner.
stat.S_IWUSR: Write by owner.
stat.S_IXUSR: Execute by owner.
stat.S_IRWXG: Read, write, and execute by group.
stat.S_IRGRP: Read by group.
stat.S_IWGRP: Write by group.
stat.S_IXGRP: Execute by group.
stat.S_IRWXO: Read, write, and execute by others.
stat.S_IROTH: Read by others.
stat.S_IWOTH: Write by others.
stat.S_IXOTH: Execute by others.
语法:
os.chmod(path, mode);
参数:
path: This is the path for which mode would be set.
mode: This may take one of the above mentioned values or bitwise ORed combinations of them:
#!/usr/bin/python
import os, sys, stat
# Assuming /tmp/foo.txt exists, Set a file execute by the group.
os.chmod("/tmp/foo.txt", stat.S_IXGRP)
# Set a file write by others.
os.chmod("/tmp/foo.txt", stat.S_IWOTH)
print "Changed mode successfully!!"
This produces following result:
Changed mode successfully!!
os.chmod("/tmp/foo.txt", stat.S_IRWXU|stat.S_IRWXG|stat.S_IRWXO) # mode:777
其他命令
os.system() :调用shell
import os
os.system('cmd')
其他
查找指定目录中大于1G的文件,获取路径和大小,输出到txt和excel中。
import os
import xlwings as xw
import datetime
import xlsxwriter
x=[]
y=[]
#指定查找路径
path='D:\\tools'
for dir,path,file in os.walk(path):
for j in file:
try:
if j.endswith('.dll')==False and float(os.path.getsize(os.path.join(dir,j))/1024/1024/1024)>1 :
x.append(os.path.join(dir,j)+'大小:'+format(float(os.path.getsize(os.path.join(dir,j))/1024/1024/1024),'.2f')+'G')
y.append(os.path.join(dir,j))
#排除有问题的文件如dll,temp之类的
except FileNotFoundError:
x=x
y=y
print(x)
#存成txt
with open('D:\\hello\\x.txt','w') as f:
for i in x:
f.write(str(i)+'\n')
#存成excel
workbook = xlsxwriter.Workbook(r'D:\hello\x.xlsx')
worksheet = workbook.add_worksheet('大文件')
worksheet.set_column('A:A',130)
worksheet.write('A1','文件路径')
worksheet.write('B1','文件大小/G')
for i in range(0,len(y)):
worksheet.write('A'+str(i+2), y[i])
worksheet.write('B' + str(i + 2), z[i])
workbook.close()