Python:文件操作技巧(File operation)Python:文件操作技巧(File operation) ?读写文件 #!?/usr/bin/python
Python:文件操作技巧(File operation)
Python:文件操作技巧(File operation)
?
读写文件
#!?/usr/bin/python
# ?-*-?coding:?utf8?-*-?
spath = " D:/download/baa.txt "
f = open(spath, " w " )? # ?Opens?file?for?writing.Creates?this?file?doesn't?exist.
f.write( " First?line?1.\n " )
f.writelines( " First?line?2. " )
f.close()
f = open(spath, " r " )? # ?Opens?file?for?reading
for ?line? in ?f:
???? print ( " 每一行的数据是:%s " % line)
f.close()
'''
????知识点:?如何读写文件
'''
?
?
遍历文件夹和文件
import ?os
import ?os.path
# ?os,os.path里包含大多数文件访问的函数,所以要先引入它们.
# ?请按照你的实际情况修改这个路径
rootdir? = ? " d:/download "
for ?parent,?dirnames,?filenames? in ?os.walk(rootdir):
???? # case?1:
???? for ?dirname? in ?dirnames:
???????? print ?( " parent?is: " ? + ?parent)
???????? print ?( " dirname?is: " ? + ?dirname)
???? # case?2
???? for ?filename? in ?filenames:
???????? print ?( " parent?is: " ? + ?parent)
???????? print ?( " filename?with?full?path?: " ? + ?os.path.join(parent,?filename))
''' 知识点:
????*?os.walk返回一个三元组.其中dirnames是所有文件夹名字(不包含路径),filenames是所有文件的名字(不包含路径).parent表示父目录.
????*?case1?演示了如何遍历所有目录.
????*?case2?演示了如何遍历所有文件.
????*?os.path.join(dirname,filename)?:?将形如"/a/b/c"和"d.java"变成/a/b/c/d.java".
'''
?
?
分割路径和文件名 ?
import ?os.path
# 常用函数有三种:分隔路径,找出文件名.找出盘符(windows系统),找出文件的扩展名.
# 根据你机器的实际情况修改下面参数.
spath = " D:/download/repository.7z "
# ?case?1:
p,f = os.path.split(spath);
print ( " dir?is: " + p)
print ( " file?is: " + f)
# ?case?2:
drv,left = os.path.splitdrive(spath);
print ( " driver?is: " + drv)
print ( " left?is: " + left)
# ?case?3:
f,ext = os.path.splitext(spath);
print ( " f?is: " + f)
print ( " ext?is: " + ext)
'''
????知识点:????这三个函数都返回二元组.
????*?case1?分隔目录和文件名
????*?case2?分隔盘符和文件名
????*?case3?分隔文件和扩展名
'''
总结:5个函数
os.walk(spath) os.path.split(spath) os.path.splitdrive(spath) os.path.splitext(spath) os.path.join(path1,path2)
?
复制文件 ?
import ?shutil
import ?os
import ?os.path
src = " d:\\download\\test\\myfile1.txt "
dst = " d:\\download\\test\\myfile2.txt "
dst2 = " d:/download/test/测试文件夹.txt "
dir1 = os.path.dirname(src)
print ( " dir1?%s " % dir1)
if (os.path.exists(src) == False):
????os.makedirs(dir1)???????
f1 = open(src, " w " )
f1.write( " line?a\n " )
f1.write( " line?b\n " )
f1.close()
shutil.copyfile(src,?dst)
shutil.copyfile(src,?dst2)
f2 = open(dst, " r " )
for ?line? in ?f2:
???? print (line)
f2.close()
# 测试复制文件夹树
try :
????srcDir = " d:/download/test "
????dstDir = " d:/download/test2 "
???? # 如果dstDir已经存在,那么shutil.copytree方法会报错!
???? # 这也意味着你不能直接用d:作为目标路径.
????shutil.copytree(srcDir,?dstDir)
except ?Exception?as?err:
???? print ?(err)
????
'''
????知识点:
????*?shutil.copyfile:如何复制文件
????*?os.path.exists:如何判断文件夹是否存在
????*?shutil.copytree:如何复制目录树????
'''
总结:4个函数
os.path.dirname(path) os.path.exists(path) shutil.copyfile(src, dst) shutil.copytree(srcDir, dstDir)
?
?
实战:文件备份小程序 ?
import ?os
import ?shutil
import ?datetime
'''
作用:将目录备份到其他路径。
实际效果:
假设给定目录"/media/data/programmer/project/python"?,
备份路径"/home/diegoyun/backup/“?,
则会将python目录备份到备份路径下,形如:
/home/diegoyun/backup/yyyymmddHHMMSS/python/xxx/yyy/zzz
..
用法:更改这两个参数.
backdir:备份目的地.
copydirs:想要备份的文件夹.
'''
def ?mainLogic():
???? # add?dirs?you?want?to?copy
????backdir = " d:\\test "
???? print (backdir)
????copydirs = []
????copydirs.append( " d:\\temp " );
???? # copydirs.append("d:\\test");
????
????
???? print ( " Copying?files??=================== " )
????start = datetime.datetime.now()
???? # gen?a?data?folder?for?backup
????backdir = os.path.join(backdir,start.strftime( " %Y-%m-%d " ))
???? # print("backdir?is:"+backdir)
????
????kc = 0
???? for ?d? in ?copydirs:
????????kc = kc + copyFiles(d,backdir)
????end = datetime.datetime.now()
???? print ( " Finished!?=================== " )
???? print ( " Total?files?:? " ? + ?str(kc)?)
???? print ( " Elapsed?time?:? " ? + ?str((end - start).seconds) + " ?seconds " )
def ?copyFiles(copydir,backdir):
????prefix = getPathPrefix(copydir)
???? # print("prefix?is:"+prefix?)???
????i = 0
???? for ?dirpath,dirnames,filenames? in ?os.walk(copydir):
???????? for ?name? in ?filenames:
????????????oldpath = os.path.join(dirpath,name)
????????????newpath = omitPrefix(dirpath,prefix)
???????????? print ( " backdir?is: " + backdir?)???????????
????????????newpath = os.path.join(backdir,newpath)
???????????? print ( " newpath?is: " + newpath)
???????????? if ?os.path.exists(newpath) != True:
????????????????os.makedirs(newpath)??
????????????newpath = os.path.join(newpath,name)
???????????? print ( " From: " + oldpath + " ?to: " + newpath)
????????????shutil.copyfile(oldpath,newpath)
????????????i = i + 1
???? return ?i????
def ?getPathPrefix(fullpath):
???? # Giving?/media/data/programmer/project/?,?get?the?prefix
???? # /media/data/programmer/
????l = fullpath.split(os.path.sep)
???? # print(str(l[-1]=="")????
???? if ?l[ - 1 ] == "" :
????????tmp = l[ - 2 ]
???? else :
????????tmp = l[ - 1 ]
???? return ?fullpath[0:len(fullpath) - len(tmp) - 1 ]
def ?omitPrefix(fullpath,prefix):
???? # Giving?/media/data/programmer/project/python/tutotial/file/test.py?,
???? # and?prefix?is?Giving?/media/data/programmer/project/,
???? # return?path?as?python/tutotial/file/test.py
???? return ?fullpath[len(prefix) + 1 :]
mainLogic()
?
转:http://www.cnitblog.com/yunshichen/archive/2008/08/11/47900.html