组织文件

简介:

shutil模块

shutil模块中包含一些函数,提供复制、移动、改名和删除文件的功能。要使用shutil的函数,首先需要import shutil。


调用shutil.copy(source,destination),将路径source处的文件复制到路径destination处的文件夹(source和destination都是字符串)。如果destination是一个文件名,它将作为被复制文件的新名字。该函数返回一个字符串,表示被复制文件的路径。

shutil.copy()将复制一个文件,shutil.copytree()将复制整个文件夹,以及它包含的文件夹和文件。shutil.copytree()函数返回一个字符串,是新复制的文件夹的路径。

1
2
3
4
5
6
7
8
9
10
>>>  import  shutil,os
>>> os.chdir( '/tmp/' )
>>> shutil.copy( './1.txt' , '/tmp/newdir/' )
'/tmp/newdir/1.txt'
>>> shutil.copy( './1.txt' , '/tmp/newdir/2.txt' )
'/tmp/newdir/2.txt'
 
>>>  import  os,shutil
>>> shutil.copytree( '/tmp/newdir' , '/usr/local/newdir_backup' )
'/usr/local/newdir_backup'


调用shutil.move(source,destination),将路径source处的文件夹移动到路径destination,并返回新位置的绝对路径的字符串。

如果找不到destination的文件夹,python会假定destination指的是一个文件,而非文件夹。

构成目的地的文件夹必须已经存在,否则python会抛出异常。

1
2
3
>>>  import  shutil
>>> shutil.move( '/usr/local/newdir_backup' , '/tmp/newdir/' )
'/tmp/newdir/newdir_backup'


利用os模块中的函数,可以删除一个文件或一个空文件夹。但利用shutil模块,可以删除一个文件夹及其所有的内容。

用os.unlink(path)将删除path处的文件。

调用os.rmdir(path)将删除path处的文件夹。该文件夹必须为空,其中没有任何文件和文件夹。

调用shutil.rmtree(path)将删除path处的文件夹,它包含的所有文件和文件夹都会被删除。

在程序中使用这些函数时,可以在第一次运行程序时,注释掉这些调用,并且加上print()调用,显示会被删除的文件。

1
2
3
4
5
import os
for filename in os.listdir():
      if filename.endswitch('.rxt'):
          #os.uplink(filename)
          print(filename)


使用内建的shutil.rmtree()函数不可恢复地删除文件和文件夹,所以用起来可能有危险。

删除文件和文件夹的更好方法,是使用第三方的send2trash模块。

它将文件夹和文件发送到计算机的垃圾箱或回收站,而不是永久删除它们。

一般来说,总是应该使用send2trash.send2trash()函数来删除文件和文件夹。

这种方式,不像永久删除文件,不会释放磁盘空间。

send2trash()函数只能将文件送到垃圾箱,不能从中恢复文件。

1
2
3
4
5
6
7
8
9
[root@juispan newdir] # pip install send2trash
Collecting send2trash
   Downloading Send2Trash-1.3.0. tar .gz
Building wheels  for  collected packages: send2trash
   Running setup.py bdist_wheel  for  send2trash ...  done
   Stored  in  directory:  /root/ .cache /pip/wheels/15/76/b3/a81bb5d0bfc6157d1e5df52d34cbea6ffe8a0fc6fea83bddb0
Successfully built send2trash
Installing collected packages: send2trash
Successfully installed send2trash-1.3.0
1
2
3
4
5
>>>  import  send2trash
>>> newFile = open ( '/tmp/new.txt' , 'a' )
>>> newFile.write( 'Hello World!' )
>>> newFile.close()
>>> send2trash.send2trash( '/tmp/new.txt' )


遍历目录树

os.walk()函数被传入一个字符串值,即一个文件夹的路径。

可以在一个for循环语句中使用os.walk()函数,遍历目录树,就像使用range()函数遍历一个范围的数字一样。

▎不像range(),os.walk()在循环的每次迭代中,返回3个值:

  1、当前文件夹名称的字符串。

  2、当前文件夹中子文件夹的字符串的列表。

  3、当前文件夹中文件的字符串的列表。

所谓的当前文件夹,是指for循环当前迭代的文件夹。程序的当前工作目录,不会因为os.walk()而改变。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
>>>  import  os
>>>  for  dir ,subdirs,files  in  os.walk( '/tmp/' ):
...      print ( 'dir: ' + dir )
...      for  subdir  in  subdirs:
...              print ( 'subdir: ' + subdir)
...      for  file  in  files:
...              print ( 'file: ' + file )
...      print ('')
...
dir / tmp /
subdir: .font - unix
subdir: .X11 - unix
subdir: .ICE - unix
subdir: .Test - unix
......


zipfile模块

将多个文件打包成一个文件,这个文件叫做“归档文件”。

要创建一个ZipFile对象,就调用zipfile.ZipFile()函数,向它传入一个字符串,表示.zip文件的文件名。

zipfile是python模块的名称,ZipFile()是函数的名称。

ZipFile对象有一个namelist()方法,返回ZIP文件中包含的所有文件和文件夹的字符串的列表。这些字符串可以传递给ZipFile对象的getinfo()方法,返回一个关于特定文件的ZipInfo对象。ZipInfo对象有自己的属性,诸如表示字节数的file_size和compress_size,它们分别表示原来文件大小和压缩后文件大小。ZipFile对象表示整个归档文件,而ZipInfo对象则保存该归档文件中每个文件的有用信息。

1
2
3
4
5
6
7
8
9
10
>>>  import  zipfile,os
>>> zipFile = zipfile.ZipFile( '/tmp/new.zip' )
>>> zipFile.namelist()
[ 'tmp/newdir/1.txt' ]
>>> zipInfo = zipFile.getinfo( 'tmp/newdir/1.txt' )
>>> zipInfo.file_size
1100
>>> zipInfo.compress_size
482
>>> zipFile.close()


ZipFile对象的extractall()方法从ZIP文件中解压缩所有文件和文件夹,放到当前工作目录中。

如果传递给extractall()方法的文件夹不存在,它会被创建。

extract()方法可以从ZIP文件中解压缩单个文件。

传递给extract()的字符串,必须匹配namelist()返回的字符串列表中的一个。

可以向extract()传递第二个参数,将文件解压缩到指定的文件夹,而不是当前工作目录。

如果第二个参数指定的文件夹不存在,python就会创建它。

extract()的返回值是被压缩后文件的绝对路径。

1
2
3
4
>>>  import  os,zipfile
>>> extractZip = zipfile.ZipFile( '/tmp/new.zip' )
>>> extractZip.extractall()
>>> extractZip.close()


如果向ZipFile对象的write()方法传入一个路径,python就会压缩该路径所指的文件,将它加入ZIP文件中。

write()方法的第一个参数是一个字符串,代表要添加的文件名。第二个参数是“压缩类型”参数,可以总是设置为“zipfile.ZIP_DEFLATED”。

就像写入文件一样,写模式将擦除ZIP文件中所有原有的内容。如果需要添加,使用“a”作为第二个参数。

1
2
3
4
>>>  import  zipfile,os
>>> newZip = zipfile.ZipFile( '/tmp/new.zip' , 'w' )
>>> newZip.write( '/tmp/newdir/1.txt' ,compress_type = zipfile.ZIP_DEFLATED)
>>> newZip.close()












本文转自Grodd51CTO博客,原文链接:http://blog.51cto.com/juispan/1950074 ,如需转载请自行联系原作者
相关文章
LaTeX中定义新命令和环境
LaTeX中定义新命令和环境
839 0
LaTeX中定义新命令和环境
|
缓存 容灾 安全
Nacos配置中心介绍与应用,微服务开发标配组件
Nacos 动态配置服务可以让你以中心化、外部化和动态化的方式管理所有环境的应用配置和服务配置。动态配置消除了配置变更时重新部署应用和服务的需要,让配置管理变得更加高效和敏捷。
774 0
Nacos配置中心介绍与应用,微服务开发标配组件
|
9月前
|
存储 算法 编译器
【C语言】register 关键字详解
`register` 关键字是C语言中的一种存储类修饰符,它用于提示编译器将变量存储在CPU寄存器中,而不是在内存中。这种做法旨在提高变量访问的速度,因为访问寄存器比访问内存快得多。
253 1
|
搜索推荐 数据管理 开发者
合同管理的高级流程设计|学习笔记
快速学习合同管理的高级流程设计
合同管理的高级流程设计|学习笔记
|
存储 安全 网络安全
Pikachu敏感信息泄露通关解析
Pikachu敏感信息泄露通关解析
|
前端开发 JavaScript Go
前端开发规范
前端开发规范
11896 3
|
XML Cloud Native 数据格式
带你读《云原生机密计算最佳实践白皮书》——AMD SEV机密虚拟机(3)
带你读《云原生机密计算最佳实践白皮书》——AMD SEV机密虚拟机(3)
347 0
|
数据管理 数据库
两种不同充血模型实现中的问题及解决办法
### 前言 关于贫血模型与充血模型,已经有大量的文章写到了,但大部分都只是写了两种模型的对比,其中的例子也相对比较简单。 当我们真正在使用充血模型的过程中,还会碰到很多问题,本文期望通过我们复杂的业务场景,深入的讲解我们在真正使用充血模型时,到底会碰到哪些问题,我们又要如何来解决。 ### 什么是充血模型 Martin Fowler在2003年发表的一篇文章中,第一次提出贫血模型的概念,他把贫
2354 0
|
机器学习/深度学习 缓存 自然语言处理
更加灵活、经济、高效的训练——新一代搜推广稀疏大模型训练范式GBA
近日,阿里巴巴在国际顶级机器学习会议NeurIPS 2022上发表了新的自研训练模式 Gloabl Batch gradients Aggregation (GBA,论文链接:https://arxiv.org/abs/2205.11048),由阿里妈妈事业部搜索广告团队和智能引擎事业部XDL训练引擎团队联合探索和研发。GBA的提出对阿里巴巴搜推广稀疏模型的训练范式带来了架构性的跨越式升级。本文将从GBA的设计思路、收敛性分析及工程实现等方面展开介绍,欢迎阅读交流。
更加灵活、经济、高效的训练——新一代搜推广稀疏大模型训练范式GBA
|
弹性计算 Ubuntu 安全
阿里云服务器镜像是什么?镜像怎么选择比较好?
阿里云服务器镜像是为云服务器选择操作系统,系统分为Windows和Linux两大类,镜像来源分为公共镜像、自定义镜像、共享镜像、镜像市场和社区镜像
1603 0
阿里云服务器镜像是什么?镜像怎么选择比较好?