您的位置:首页 > 编程语言 > Python开发

python下的文件相关操作

2017-04-20 21:41 441 查看
python中对文件、文件夹(文件操作函数)涉及到的主要两个模块:osshutil

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: