python中对文件、文件夹(文件操作函数)涉及到的主要两个模块:os和shutil
os是一个基础的文件操作,shutil是一种高层次的文件操作工具
关于os的操作,主要集中在文件、文件夹读取方面
使用前加入包: import os
- 读取当前python的工作目录: os.getcwd()
>>> path = os.getcwd()
>>> path
'D:\\myself\\python\\docment'
- 返回指定目录下的所有文件和目录名: os.listdir(path),其中path为指定路径
>>> path = 'D:\\myself\\python\\docment'
>>> str = os.listdir(path)
>>> str
['.idea', '1.jpg', 'tutorials', 'unet', 'untitled0.py', '__pycache__']
函数用来删除一个文件:os.remove(path)
检验给出的路径是否是一个文件:os.path.isfile(path)
检验给出的路径是否是一个目录:os.path.isdir(path)
>>>path = 'D:\\myself\\python\\docment'
>>> os.path.isfile(path)
False
>>> os.path.isdir(path)
True
检验给出的路径是否真地存:os.path.exists(path)
返回一个路径的目录名和文件名:os.path.split()
>>> path = 'D:\\myself\\python\\docment\\1.jpg'
>>> os.path.split(path)
('D:\\myself\\python\\docment', '1.jpg')
- 分离扩展名:os.path.splitext()
>>> os.path.splitext(path)
('D:\\myself\\python\\docment\\1', '.jpg')
所以获得文件的后缀类型可以用:
>>> file = os.path.splitext(path)
>>> file[1][1:]
'jpg'
获取路径名:os.path.dirname(path)
获取文件名:os.path.basename(path)
>>> path
'D:\\myself\\python\\docment\\1.jpg'
>>> os.path.dirname(path)
'D:\\myself\\python\\docment'
>>> os.path.basename(path)
'1.jpg'
- 重命名:os.rename(old, new)
>>> old_name = 'D:\\myself\\python\\docment\\1.jpg'
>>> new_name = 'D:\\myself\\python\\docment\\2.jpg'
>>> os.rename(old_name, new_name)
>>> os.listdir(path)
['.idea', '2.jpg', 'tutorials', 'unet', 'untitled0.py', '__pycache__']
创建多级目录:os.makedirs(path)
创建单个目录:os.mkdir(path)
获取文件大小:os.path.getsize(filename)
path = 'D:\\myself\\python\\docment\\2.jpg'
>>> os.path.getsize(path)
8538
8538就是图像的所有内存大小,单位为B
关于文件读写的操作
- fp = open(“test.txt”,’r+’) 直接打开一个文件
常见的方式:
w 以写方式打开,
a 以追加模式打开 (从 EOF 开始, 必要时创建新文件)
r+ 以读写模式打开
w+ 以读写模式打开 (参见 w )
a+ 以读写模式打开 (参见 a )
rb 以二进制读模式打开
wb 以二进制写模式打开 (参见 w )
ab 以二进制追加模式打开 (参见 a )
rb+ 以二进制读写模式打开 (参见 r+ )
wb+ 以二进制读写模式打开 (参见 w+ )
ab+ 以二进制读写模式打开 (参见 a+ )
假设txt中存着3行3列数
- fp.read(size) ,size为读取的长度,以byte为单位
>>> fp.close()
>>> fp = open('test.txt','r+')
>>> fp.read(5)
'1 1 1'
- fp.readline() ,读一行,fp指向下一行
>>> fp.close()
>>> fp = open('test.txt','r+')
>>> fp.readline()
'1 1 1\n'
>>> fp.readline()
'2 2 2\n'
>>> fp.readline()
'3 3 3'
- fp.readlines() ,读全部行,存起来为list
>>> fp.close()
>>> fp = open('test.txt','r+')
>>> fp.readlines()
['1 1 1\n', '2 2 2\n', '3 3 3']
- fp.write(str) ,把str写到文件中,write()并不会在str后加上一个换行符
>>> fp.close()
>>> fp = open('test.txt','r+')
>>> fp.readlines()
['1 1 1\n', '2 2 2\n', '3 3 3']
>>> fp.write('\n4 4 4')
>>> fp.close()
>>> fp = open('test.txt','r+')
>>> fp.readlines()
['1 1 1\n', '2 2 2\n', '3 3 3\n', '4 4 4']
fp.writelines(seq) , 把seq的内容全部写到文件中(多行一次性写入)
fp.close() , 关闭文件。
fp.next() , 返回下一行,并将文件操作标记位移到下一行。把一个file用于for … in file这样的语句时,就是调用next()函数来实现遍历的。
shutil高级应用的操作,集中在文件复制删除等等
使用前加入包: import shutil
shutil.copyfile(‘oldfile’,’newfile’)
oldfile和newfile都只能是文件shutil.copy(‘oldfile’,’newfile’)
oldfile只能是文件夹,newfile可以是文件,也可以是目标目录复制文件夹:
shutil.copytree(‘olddir’,’newdir’)
olddir和newdir都只能是目录,且newdir必须不存在重命名文件(目录)
os.rename(‘oldname’,’newname’)
文件或目录都是使用这条命令移动文件(目录)
shutil.move(‘oldpos’,’newpos’)删除文件
os.remove(‘file’)删除目录
os.rmdir(‘dir’) ,只能删除空目录
shutil.rmtree(‘dir’), 空目录、有内容的目录都可以删
读写操作与读取文件夹文件代码模板
# 读取文件内容并打印
def readFile(filename):
fopen = open(filename, 'r') # r 代表read
for eachLine in fopen:
print("读取到得内容如下:",eachLine)
fopen.close()
# 输入多行文字,写入指定文件并保存到指定文件夹
def writeFile(filename):
fopen = open(filename, 'w')
print("\r请任意输入多行文字"," ( 输入 .号回车保存)")
while True:
aLine = input()
if aLine != ".":
fopen.write('%s%s' % (aLine, os.linesep))
else:
print("文件已保存!")
break
fopen.close()
#读取dir目录下(包含子文件夹下)的所有类型为ext的文件
def GetFileFromThisRootDir(dir,ext = None):
allfiles = []
needExtFilter = (ext != None)
for root,dirs,files in os.walk(dir):
for filespath in files:
filepath = os.path.join(root, filespath)
extension = os.path.splitext(filepath)[1][1:] #分离扩展名
if needExtFilter and extension == ext:
allfiles.append(filepath)
return allfiles
#读取dir目录下(不包含子文件夹下)的所有类型为ext的文件
def GetFileFromThisDir(dir,ext = None):
allfiles = []
needExtFilter = (ext != None)
for files in os.listdir(dir):
extension = os.path.splitext(files)[1][1:] #分离扩展名
if needExtFilter and extension == ext:
allfiles.append(filepath)
return allfiles