Python 3 教程二:文件,目录和路径
生活随笔
收集整理的這篇文章主要介紹了
Python 3 教程二:文件,目录和路径
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1 遍歷文件夾和文件
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".
'''
2 分割路徑和文件名
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)
3 復制文件
import ?shutilimport ?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)
4 實戰:文件備份小程序
import ?osimport ?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()
5 資源:方法詳解
你可以在這里看到更多的api解釋,感謝該作者: http://www.cnpython.org/docs/200/p_119.html
轉載于:https://www.cnblogs.com/moiyer/archive/2010/03/27/1952694.html
總結
以上是生活随笔為你收集整理的Python 3 教程二:文件,目录和路径的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: http://msdn.microsof
- 下一篇: [BZOJ1925]地精部落