对于日常中遇到的批量任务,有些可以通过请求python完成自动化,我非常渴望拥有这些能力,在去年学习了python读写文件之后,我马上迫不及待的开始学习‘组织文件’,经过学习,我发现python组织文件是这样的

Python的 os 模块封装了操作系统的目录和文件操作,要注意这些函数有的在 os 模块中,有的在 os.path 模块中。

、 shutil 模块

  复制、移动、改名、和删除文件

  

1.1复制文件和文件夹

   shutil.copy(source,destination) 将路径 source 处的文件复制到路径 destination 处的文件夹

>>>import shutil,os
>>>os.chdir('C:\\')
>>>shutil.copy('C:\\spam.txt','C:\\delicious')
'C:\\delicious\\spam.txt'  #返回的是被复制文件的新路径
>>>shutil.copy('eggs.txt','C:\\delicious\\eggs2.txt') #假如提供了文件名,会作为新复制的文件名
'C:\\delicious\\eggs2.txt'

   shutil.copytree(source,destination) 复制整个文件夹,将路径 source 处的文件夹,包括他的所有文件和子文件夹

1.2文件和文件夹的移动与改名

   shutil.move(source,destination)   

>>>import shutil
>>>shutil.move('C:\\bacon.txt','C:\\eggs')
'C:\\eggs\\bacon.txt'

  值得注意的是:假如在 destination 中已经存在一个文件bacon.txt,它就会被覆写

   destination 路径也可以指定一个文件名。

>>>shutil.move('C:\\bacon.txt','C:\\eggs\\new_bacon.txt')    #将被移动并改名,若new_bacon.txt不存在将会新建
C:\\eggs\\new_bacon.txt'

  更值得注意的是:前面都假设 eggs 文件夹存在,假如不存在, move() 就会将bacon.txt改名,变成名为eggs的文件

>>>shutil.move('C:\\bacon.txt','C:\\eggs’)
‘C:\\eggs’

  这里 move() 在C:\目录下找不到名为eggs的文件夹,所以python会假定 destination 指的是一个文件,而非文件夹所以bacon.txt文本文件将被改名为eggs(没有.txt文件扩展名的文本文件),这会成为程序中很难发现的缺陷,

  最后,构成目的地的文件夹必须已经存在,否则Python会抛出异常 FileNotFoundError: [Errno 2]

1.3永久删除文件和文件夹

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

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

  用 os.rmdir(path) 将删除path处的文件夹。但是该文件夹必须为空

  用 shutil.rmtree(path) 将删除path处的文件夹,包括它所包含的内容

1.4用send2trash模块安全的删除

   shutil.rmtree() 函数的操作是不可逆的,或许我们疏忽的时候就会造成无法挽回的损失,跑路或许是一段不一样的人生历程,或许会有诗和远方,但是更遥远的地方,除了遥远一无所有,代码不规范,亲人两行泪也不是不可能

   send2trash (这个2一定是用和与to同音之意,没错,我又犯了那个毛病)模块会将删除的文件发送到计算机的回收站

>>> send2trash.send2trash('test.txt')

二、遍历目录树

   os.work(path) 是这一小节的猪脚,他每一次出发,完事后都会留下三个孩子,然后深藏功与名,一次,只需要一次就能遍历所有的,不用担心二级文件夹里的

  当前文件夹名称的字符串、当前文件夹中子文件夹的字符串的列表、当前文件夹中文件的字符串的列表

for folderName,subfolders,filenames in os.walk(path):
print('*'*10+'The current folder is:'+folderName)
print(subfolders)
print(filenames)

  运行结果

**********The current folder is:C:\Users\Administrator.SC-201605202132\AppData\Local\Programs\Python\Python37\forTest
['adb_backup']  #forTest下的文件夹
['test.dir', 'test.txt', '用于python文件操作测试.txt']  #forTest下的文件 **********The current folder is:C:\Users\Administrator.SC-201605202132\AppData\Local\Programs\Python\Python37\forTest\adb_backup
[]  #adb_backup下的文件夹,这里为空说明里面没有文件夹了
['acp.exe', 'adb.exe', 'AdbWinApi.dll', 'AdbWinUsbApi.dll', 'android.bat', 'androidusb.sys', 'androidusb86.cat']  #adb_backup下的文件

三、用zipfile模块压缩文件

3.1读取ZIP文件

  要读取ZIP文件的内容,首先要创建一个ZipFile对象,这通过 zipfile.ZipFile() (这在概念上与File对象类似)

forTestZip=zipfile.ZipFile('forTest.zip')  #创建ZipFile对象

   namelist() 返回ZIP文件中包含的所有文件和文件夹的字符串的列表

   getinfo(filename) 返回一个filename的ZipInfo对象,这个对象的属性包括表示字节数的 file_name 和 compress_size ,分别表示原来的文件大小和压缩后的文件大小

  ZipFile对象表示整个归档文件,而ZipInfo对象则保存该归档文件中每个文件有用的信息

forTestZip=zipfile.ZipFile('forTest.zip')
print(forTestZip.namelist())
testInfo=forTestZip.getinfo(forTestZip.namelist()[4])
print(testInfo.file_size)
print(testInfo.compress_size)
forTestZip.close()

  结果:

['test.dir', 'test.txt',  'adb_backup/WdfCoInstaller01005.dll', 'adb_backup/zipalign.exe']
43684
14630

3.2从ZIP文件中解压缩

  ZipFile对象有两个方法去解压文件,他们分别是 extractall() 和  extract() 前者从ZIP文件中解压缩所有的文件和文件夹,后者从ZIP文件中解压缩单个文件

>>>import zipfile,os
>>>exampleZip=zipfile.ZipFile('example.zip')
>>>exampleZip.extractall('C:\\toSave') #会将解压文件保存到这个目录里,若不存在将会创建这个文件夹,参数为空,会保存到当前目录中
>>>exampleZip.close()
#extract()方法
>>>exampleZip.extractall(‘spam.txt’,'C:\\toSave')  #关于第一个参数,其必须存在与namelist()返回的字符串列表当中,换言之,他必须存在;关于第二个参数,extractall()有相同的规则
>>>'C:\\toSave\\spam.txt'  #返回被解压缩后的绝对路径

  

3.3创建和添加到ZIP文件

  要创建压缩文件,必须以“写模式”打开ZipFile对象,即传入‘w’作为第二个参数,然后调用ZipFile对象的 write(parameter1,parameter2) 方法,第一个参数代表要添加的文件名,第二个是压缩类型参数,他告诉计算机要以什么样的算法来压缩文件。可以总是将这个值设置为 zipfile.ZIP_DEFLATED (这指定了deflat压缩算法,对各类型的数据都很有效)

>>>import zipfile
>>>newZip=zipfile.ZipFile('newZip.zip','w')  #创建名为newZip的压缩文件,并以写模式打开
>>>newZip.write('example.exe',compress_type=zipfile.ZIP_DEFLATE)  #向其中添加‘example.exe’文件
>>>newZip.close()

  写模式将清除ZIP文件原有的内容。如果只希望将文件添加到原有的ZIP文件中,可以用“添加模式”打开,即

>>>newZip=zipfile.ZipFile('newZip.zip','a')  #创建名为newZip的压缩文件,并以添加模式打开

  

  学习中遇见的问题:

  在打印 namelist() 返回的文件名时出现了乱码,并且在解压时也出现了,没去解决

>>>import os,zipfile
>>>newZip=zipfile.ZipFile('newZip.zip')
>>>newZip.namelist()
['test.dir', 'test.txt', '╙├╙┌python╬─╝■▓┘╫≈▓Γ╩╘.txt', 'adb_backup/', 'adb_backup/acp.exe', 'adb_backup/adb.exe', 'adb_backup/AdbWinApi.dll']

 

四、补充

  链接:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431925324119bac1bc7979664b4fa9843c0e5fcdcf1e000

   os.name 获取操作系统类型

   os.uname() 获取操作系统详细信息(Windows不提供)

  环境变量

    通过 os.environ 这个变量来查看系统中定义的环境变量  

    通过 os.environ.get('key') 来获取某个环境变量的详细信息

Python IO编程-组织文件的更多相关文章

  1. Python IO编程-读写文件

    1.1给出规格化得地址字符串,这些字符串是经过转义的能直接在代码里使用的字符串 需要导入os模块 import os >>>os.path.join('user','bin','sp ...

  2. python用户界面编程和文件转换为exe文件

    python用户界面编程学习代码如下所示: #python用户图形界面编程实现import sys #简单用户图形界面实现from PyQt5.QtWidgets import QApplicatio ...

  3. Python IO编程

    IO在计算机中指Input/Output,也就是输入和输出 一.文件读写 1.读文件 >>> f = open('/Users/michael/test.txt', 'r') --- ...

  4. Python3 IO编程之文件读写

    读写文件是最常见的IO操作.python内置了读写文件的函数,用法和C是兼容的. 读写文件前,我们先必须了解一个,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序终结操作磁盘, ...

  5. [Python学习笔记]组织文件

    shutil 模块 shutil 模块可以让我们很方便的在Python程序中复制.移动.改名和删除文件. 复制文件和文件夹 使用shutil.copy()来复制文件,该函数含两个参数,均为字符串格式的 ...

  6. python IO编程-序列化

    原文链接:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143192607 ...

  7. python IO编程-StringIO和BytesIO

    链接:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014319187857 ...

  8. Java IO编程——File文件操作类

    在Java语言里面提供有对于文件操作系统操作的支持,而这个支持就在java.io.File类中进行了定义,也就是说在整个java.io包里面,File类是唯一 一个与文件本身操作(创建.删除.重命名等 ...

  9. java学习笔记之IO编程—File文件操作类

    1. File类说明 在Java语言里面提供有对于文件操作系统操作的支持,而这个支持就在java.io.File类中进行了定义,也就是说在整个java.io包里面,File类是唯一一个与文件本身操作( ...

随机推荐

  1. Android 数据存取

    Android提供了Preference(配置),File(文件),SQLite数据和网络几种数据存取方式 SharedPreference提供了一种轻量级的数据存取方法,应用场合主要是比较少的配置信 ...

  2. MyBatis数据持久化(九)动态sql

    本文摘自:mybatis参考文档中文版 MyBatis的一个强大的特性之一通常是它的动态SQL能力.如果你有使用JDBC或其他相似框架的经验,你就明白条件地串联SQL字符串在一起是多么的痛苦,确保不能 ...

  3. Servlet学习(八)——Session

    1.Session技术 Session技术是将数据存储在服务器端的技术,会为每个客户端都创建一块内存空间存储客户的数据,但客户端需要每次都携带一个标识ID去服务器中寻找属于自己的内存空间.所以说Ses ...

  4. 【学习】JMS通信模式

    1.关于JMS的点对点模式 JMS的点对点模式下,多个消费者可以注册到同一个队列上,但是生产者的某个消息只能被一个消费者接收,在多个消费者间,生产者的消息被多个消费者循环接收,如当前有6个消息在队列中 ...

  5. Caffe Loss分析

    Caffe_Loss 损失函数为深度学习中重要的一个组成部分,各种优化算法均是基于Loss来的,损失函数的设计好坏很大程度下能够影响最终网络学习的好坏.派生于 \(LossLayer\),根据不同的L ...

  6. 使用IDEA在Maven中创建MyBatis逆向工程以及需要注意的问题(入门)

    逆向工程简介: mybatis官方提供逆向工程,可以针对单表自动生成mybatis执行所需要的代码(mapper.java.mapper.xml.pojo…),可以让程序员将更多的精力放在繁杂的业务逻 ...

  7. JavaScript内存机制

    内存模型 JS内存空间分为栈(stack).堆(heap).池(一般也会归类为栈中). 其中栈存放变量,堆存放复杂对象,池存放常量. 基础数据类型与栈内存 JS中的基础数据类型,这些值都有固定的大小, ...

  8. iOS开发——GCD总结

    Grand Central Dispatch,简称GCD,在异步执行任务的技术之一. 一般将应用程序中记述的线程管理用的代码在系统级中实现,开发者只需要定义想执行的任务并追加到适当的Dispatch ...

  9. UVA-12083 Guardian of Decency 二分图 最大独立集

    题目链接:https://cn.vjudge.net/problem/UVA-12083 题意 学校组织去郊游,选择最多人数,使得任意两个人之间不能谈恋爱 不恋爱条件是高差大于40.同性.喜欢的音乐风 ...

  10. luogu P3396 哈希冲突(分块?)

    我们可以维护一个\(f[i][j]\)代表%\(i\)意义下得\(j\)的答案.然后维护就炸了. 先设\(x=\sqrt{n}\)然后我们发现,当\(i>x\)时我们直接暴力复杂度为\(O(x) ...