1 文件操作

  文件有很多的操作,之前的文件操作中介绍了内建函数对文件的打开、读取以及写入,这三种操作是对文件基本的使用。文件还有复制、删除、移动、改变文件的属主属组等操作。下面主要看os模块和shutil模块提供的对文件操作的方法。

2 os模块

  os模块中也有open、read、write方法,但是太低级,建议使用内建函数open、read、write,二者使用方法相似。以下是os模块提供的对文件操作的相关属性和方法:

属性或方法 功能
os.name 返回操作系统类型,windows是nt,Linux是posix。
os.uname() 返回操作系统信息,*nix支持。
os.listdir('o:/temp') 返回目录内容列表。

os.stat(path, *, dir_fd=None,

follow_symlinks=Ture)

该方法的本质是调用linux系统的stat命令。

path: 路径的string或bytes,或fd文件描述符。

follow_symlinks: True返回文件本身信息,False且如果是软链接

则显示软链接本身。

os.chmod(path, mode, *, dir_fd=None,

follow_symlinks=True)

改变文件权限,例如os.chmod('test', 0o777)
os.chown(path, uid, gid) 该文件的属主、属组,但是需要足够的权限

3 shutil模块

  通过前面介绍的一些文件操作的方法,使用打开两个文件对象,读取源文件内容,然后将内容写入目标文件中来完成文件拷贝过程。但是这样会丢失stat数据信息(权限等),因为根本没有复制这些信息过去。Python提供了一个高级文件操作shutil库,下面来看下,shutil库中提供的操作文件的方法。

3.1 copy复制

  • copyfileobj(fsrc, fdst[, length])

  文件对象的复制,fsrc和fdst是open打开的文件对象,复制内容。fdst要求可写。其中length指定了表示buffer的大小。

 import shutil

 with open('test.txt', 'w+') as f1:
f1.write('abcd\n1234')
f1.flush()
print(f1.tell())
f1.seek(0) # 在f1文件写入内容后文件指针会指向文件末尾,此时要将文件指针指向文件头,才能完成下面的复制过程
with open('test1.txt', 'w+') as f2:
shutil.copyfileobj(f1, f2)
  • copyfile(src, dst, *, follow_symlinks=True)

  复制文件内容,不含元数据。src、dst为文件的路径字符串,返回目标文件路径。本质上调用的就是copyfileobj,所以不带元数据二进制内容复制。注意:该方式的copy会覆盖目标文件。

 f = shutil.copyfile('test.txt', 'test1.txt')
print(f)
  • copymode(src, dst, *, follow_symlinks=True)

  仅仅复制文件的权限。

 shutil.copymode('test.txt', 'test1.txt')
print(os.stat('test.txt'))
print(os.stat('test1.txt'))
  • copystat(src, dst, *, follow_symlinks=True)

  复制元数据,stat包含权限。

  • copy(src, dst, *, follow_symlinks=True)

  复制文件内容、权限和部分元数据,不包括创建时间和修改时间。本质上调用的是copyfile和copymode。

  • copy2(src, dst, *, follow_symlinks=True)

  copy2比copy多了复制全部元数据,但是需要平台支持。本事上调用copyfile和copystat。

  • copytree(src, dst, *, symlinks=False, ignore=None, copy_function=copy2, ignore_dangling_symlinks=False)

  递归复制目录。默认使用copy2,也就是带更多元数据的复制。src、dst必须是目录,src必须存在,dst必须不存在;ignore = func,提供callable(src, names) --> ignored_names。提供一个函数,它会被调用。src是源目录,names是os.listdir(src)的结果,就是列出src中的文件名,返回值是要被过滤的文件的set类型数据。

 # o:/temp下有a、b目录
def ignore(src, names):
ig = filter(lambda x: x.startswith('a'), names) # 忽略a
return set(ig) shutil.copytree('o:/temp', 'o:/tt/o', ignore=ignore)

3.2 rm删除

  • shutil.rmtree(path, ignore_errors=False, onerror=None)

  递归删除。如同rm -rf一样危险,慎用。rmtree不是原子操作,有可能删除错误,就会中断,已经删除的就删除了。ignore_errors为true,忽略错误。当为False或者omitted时onerror生效;onerror为callable,接受函数function、path和execinfo。

shutil.rmtree('o:/tmp')    # 类似rm -rf

3.3 move移动

  • move(src, dst, copy_function=copy2)

  递归移动文件、目录到目标路径下,返回目标路径。其本质使用的是os.rename方法,如果不支持rename及移动的是目录则先copytree然后再删除源目录。默认使用copy2方法。

Python中文件操作2——shutil模块的更多相关文章

  1. Python的高级文件操作(shutil模块)

    Python的高级文件操作(shutil模块) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 如果让我们用python的文件处理来进行文件拷贝,想必很多小伙伴的思路是:使用打开2个 ...

  2. python中文件操作的六种模式及对文件某一行进行修改的方法

    一.python中文件操作的六种模式分为:r,w,a,r+,w+,a+ r叫做只读模式,只可以读取,不可以写入 w叫做写入模式,只可以写入,不可以读取 a叫做追加写入模式,只可以在末尾追加内容,不可以 ...

  3. python中文件操作的其他方法

    前面介绍过Python中文件操作的一般方法,包括打开,写入,关闭.本文中介绍下python中关于文件操作的其他比较常用的一些方法. 首先创建一个文件poems: p=open('poems','r', ...

  4. python 中文件输入输出及os模块对文件系统的操作

    整理了一下python 中文件的输入输出及主要介绍一些os模块中对文件系统的操作. 文件输入输出 1.内建函数open(file_name,文件打开模式,通用换行符支持),打开文件返回文件对象. 2. ...

  5. python 文件操作、shutil模块

    参考自:https://www.cnblogs.com/alex3714/articles/5717620.html 1. 文件基础操作 f = open('test.txt') #打开文件 firs ...

  6. Python 中文件操作

    上代码: import os import os.path rootdir = "d:/code/su/data" # 指明被遍历的文件夹 for parent,dirnames, ...

  7. python中文件操作的基本方法

    在python中对一个文件进行操作,分为三大步:打开,操作,关闭 首先创建一个文件hello,里面内容为hello world 一.打开一个文件 1.#open(‘文件名或文件路径’,‘操作模式’,文 ...

  8. Python之文件操作:os模块

    Python os 模块提供了一个统一的操作系统接口函数 一.对于系统的操作 1.os.name 当前使用平台 其中 ‘nt’ 是 windows,’posix’ 是linux 或者 unix 2.o ...

  9. Python之文件操作:sys模块

    1.sys.argv sys.argv 接受从外部传入的参数   import sys print sys.argv if sys.argv[1] == '--help': print 'True' ...

随机推荐

  1. 《java编程思想(第四版)》第一二章学习笔记

    目录 一.Introduction 1.抽象过程 2.面向对象语言(包括Java)的五个基本特性 3.每个对象都提供服务 4.public.private.protected三者的区别 5.Java的 ...

  2. MongoDB增删改查表文档

    MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写,是一个基于分布式文件存储的开源数据库系统.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介于关 ...

  3. 了解Github

    一.什么是Github Github是全球最大的社交编程及代码托管网站(https://github.com/). Github可以托管各种git库,并提供一个web界面(用户名.github.io/ ...

  4. 双系统卸载ubuntu

    转载自https://www.jianshu.com/p/30795695be95 如果开机是这样子的,就是ubuntu引导windows(专业名词gpt) ubuntu引导windows 那么先进w ...

  5. ABP开发框架前后端开发系列---(14)基于Winform的ABP快速开发框架

    前面介绍了很多ABP系列的文章,一步一步的把我们日常开发中涉及到的Web API服务构建.登录日志和操作审计日志.字典管理模块.省份城市的信息维护.权限管理模块中的组织机构.用户.角色.权限.菜单等内 ...

  6. TypeScript 装饰器的执行原理

    装饰器本质上提供了对被装饰对象 Property​ Descriptor 的操作,在运行时被调用. 因为对于同一对象来说,可同时运用多个装饰器,然后装饰器中又可对被装饰对象进行任意的修改甚至是替换掉实 ...

  7. Selenium(十八):unittest单元测试框架(四) HTML测试报告

    1. HTML测试报告 对测试人员来而言,测试的产出很难衡量.换句话说,测试人员的价值比较难以量化和评估,相信这一点对软件测试人员来说深有体会.我们花费了很多时间与精力所做的自动化测试也是如此.所以, ...

  8. Python笔记:设计模式之状态模式

    状态模式可以看做是在运行时改变对象行为的一种方式.状态模式允许对象在其内部状态变化时改变其行为,此时感觉就像对象本身已经改变了一样. 参与者: State接口:State基类,定义不同状态共同需要执行 ...

  9. mysql 5.7版本安装

    1.下载tar包,这里使用wget从官网下载 wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.22-linux-glibc2. ...

  10. Android项目模块化/组件化开发(非原创)

    文章大纲 一.项目模块化初步介绍二.项目模块化的两种模式与比较三.大型项目模块化的演进四.项目模块化总结五.参考文章   一.项目模块化初步介绍 1. 前言 在Android开发中,随着项目的不断扩展 ...