python下的文件相关操作

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/on2way/article/details/70305734

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)

    扫描二维码关注公众号,回复: 3429761 查看本文章
  • 创建单个目录: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  

猜你喜欢

转载自blog.csdn.net/on2way/article/details/70305734