例子1:我们复制一个文本文件到另一个文本文件:
首先大致分为3步,第一打开文本文件A,打开文本文件B:
file_a=open('a.text','r',encoding='utf-8')
file_b=open('b.text','w',encoding='utf-8')
第二步得到文件A的内容并往文件B写入:
a_content=file_a.read()
file_b.write(a_content)
第三步关闭文件A,文件B:
file_a.close()
file_b.close()
就完成了,你会发现太简单了,就6行代码!
这种情况是针对小文件,那么如果是大文件怎么办呢?肯定不能一次把1G或者10G全部加载到内存吧,那样的话,电脑就炸了。这样的话,我们只能一小部分一小部分的去读,在一些部分一小部分的写,下面写两种方式:
第一种方式,大家可以看到喔复制的是androidstdio的安装包,有两个G,我用时间算了一下,14秒作用的时间,还是挺快的,使用的是遍历file_a迭代器,但是这种方法不是很好,因为按照这种方式迭代是根据换行符作边界的,那如果没有换行符,就出大问题了,所以就有第二种方式
import time
start=time.clock()
file_a=open('D:\development_tool/android_stdio/android-studio-bundle-162.4069837-windows.exe','rb') file_b=open('b.exe','ab')
for i in file_a:
file_b.write(i)
file_a.close()
file_b.close()
end=time.clock()
print(end-start)
第二种方式:我们每次都读取1兆往里面写:当取出来没内容的时候,就不写了
import time
start=time.clock()
file_a=open('D:\development_tool/android_stdio/android-studio-bundle-162.4069837-windows.exe','rb') file_b=open('b.exe','ab')
while True:
a_content=file_a.read(10240)
if len(a_content)==0:
break
file_b.write(a_content)
file_a.close()
file_b.close()
end=time.clock()
print(end-start)
例子2:文件分类处理:
import os
import shutil
os.chdir('text')
list_dir=os.listdir('./')
for i in list_dir:
index=i.rfind('.')
suffix=i[index+1:]
if not os.path.exists(suffix):
os.mkdir(suffix)
shutil.move(i,suffix)
例子3:把文件夹以及文件输出成一个文本,便于查看:这个例子也没什么难点,我们写程序主要就是要搞清楚流程,一步一步的来,不能操之过急,一步一步分解,最终就能全部写完了;
import os
def printfile(path,file):
dir_list=os.listdir(path)
for dir in dir_list:
newaddress=path+'/'+dir
if os.path.isdir(newaddress):
file.write(newaddress+"\n")
printfile(newaddress,file)
else:
file.write('\t'+dir+"\n")
file=open('text/data.text','a')
printfile('text',file)
file.close()
网友评论