这是菜鸟学python的第31篇原创文章 阅读本文大概需要6分钟 文件这块知识已经讲了好几篇,
其实我最开始学的时候压根没有人告诉我这几招,后来工作中写代码多了,看了一些别人的开源代码,才发现哇有这么好的模块,真是相见恨晚啊!! 所以分享给大家,可以让初学者少走弯路.也许哪一天你工作中用到这块,可以翻开我的文章看一下~~ 1.如何对多个文件中的内容替换 假设在当前目录下有2个文件 test01.txt,test02.txt 我们需要把里面的Java全部替换为Python,一次搞定怎么做呢? |--test01.txt--- Hi All, What Is Java? What Is Programming? |--test02.txt--- Hi All, Why do people use Java? It’s an important tool to learn Python标准库里面有一个很强大的模块fileinput ,fileinput 模块允许你循环一个或多个文本文件的内容,非常实用 #!/usr/bin/env python import fileinput import glob #利用glob模块过滤出当前目录下所有的txt文件 #inplace=1 标准输出,比如print会被重定向到打开文件 #把每一行去掉回车,然后把java替换为Python for line in fileinput.input(glob.glob('*.txt'),inplace=1): print line.strip().replace('Java','Python') fileinput.close()#关闭文件句柄 >> |--test01.txt--- Hi All, What Is Python? What Is Programming? |--test02.txt--- Hi All, Why do people use Python? it’s an important tool to learn 是不是很方便,假如你在批处理邮件,有1000封邮件,你希望把里面的标题改掉,这招是不是很爽. 2.如何列出全目录结构 有的时候我们想列出当前目录下所有文件和子目录,有没有直接的方法 不需要用递归去处理,有python内置的os.walk()函数,一招搞定,是不是很贴心 假如我们有这样的一个目录结构为'C:\myPython',结构如下: |---demo--- |--demo_01.exe |--demo_02.msi |--other |--info.docc |---log----- |--1110_log.txt |--1111_log.txt |--1112_log.txt |---pic----- |--0127_1.jpg |--0127_2.jpg |--0127_3.jpg #!/usr/bin/env python import os path=r'C:\myPython' for folderName,subfolders,filenames in os.walk(path): print 'The current folder is :'+folderName for subfolder in subfolders:#列出子目录 print ('Subfolder of '+folderName+': '+subfolder) for file_name in filenames:#列出文件 print ('File insdie '+folderName+': '+file_name) >> The current folder is :C:\myPython Subfolder of C:\myPython: demo Subfolder of C:\myPython: log Subfolder of C:\myPython: pic The current folder is :C:\myPython\demo Subfolder of C:\myPython\demo: other File insdie C:\myPython\demo: demo_01.exe File insdie C:\myPython\demo: demo_02.msi The current folder is :C:\myPython\demo\other File insdie C:\myPython\demo\other: info.docx The current folder is :C:\myPython\log File insdie C:\myPython\log: 1110_log.txt File insdie C:\myPython\log: 1111_log.txt File insdie C:\myPython\log: 1112_log.txt The current folder is :C:\myPython\pic File insdie C:\myPython\pic: 0127_1.jpg File insdie C:\myPython\pic: 0127_2.jpg File insdie C:\myPython\pic: 0127_3.jpg 3.如何把多个文件copy到另外一个目录下 有的时候我们需要把一个或者多个文件备份到另外一个目录下,有没有啥办法,简单快捷搞定.有的,python提供了一个高级文件模块叫shutil,可以轻松搞定. 假如我们当前目录下有这样一个文件结构: |---backup--- |--abc.txt |---test01.txt--- |---test02.txt--- 问题: 我们想把test01.txt和text02.txt备份到backup下,怎么办 解决: 5行代码搞定 #!/usr/bin/env python #列出所有的文件 #过滤出txt文件 #copy到backup下 import shutil,os for file in os.listdir('.'): if os.path.splitext(file)[1]=='.txt': shutil.copy(file,os.path.join('backup',file)) 也许有同学说怎么拷贝目录,也有现成的模块 shutil.copytree('backup', 'backup2') 创建了backup2目录,然后把backup下的文件全部都copy过来 4.删除目录以及所有子目录的文件 很多时候特别是我们要清空一个目录的时候,若这个目录下面有文件,或者不为空,直接用os.rmdir('backup2'),会报错,告诉你:The directory is not empty: 'backup2' 捉急啊,怎么办呢: 用shutil.rmtree('backup2'),backup2目录就全部删掉了 细心的同学会发现我的源码上面为啥要加上'#!/usr/bin/env python',因为我的源码都是在win编译执行的,有同学反映这样在linux,mac上运行会报错,确实会有这个问题:
好了文件扩展模块小技巧就讲到这里啦,希望能给初学者一些启发,若有什么不懂的,也可以留言跟我探讨交流. 最后说一下,原创真的不易,希望大家能够给点支持,欢迎转发转发转发,留言留言留言,重要的事情说三遍,也是对我的一点鼓励和动力. |
|
来自: Four兄 > 《Python办公》