Python的文件及文件夾操作

轉(zhuǎn):http://blog.csdn.net/gexiaobaohelloworld/article/details/7828110

python os模塊

1. os.sep可以取代操作系統(tǒng)特定的路徑分割符。

2. os.name字符串指示你正在使用的平臺(tái)。比如對(duì)于Windows,它是'nt',而對(duì)于Linux/Unix用戶,它是'posix'。

4. os.getenv()os.putenv()函數(shù)分別用來讀取和設(shè)置環(huán)境變量。,,

7.os.system()函數(shù)用來運(yùn)行shell命令。

8. os.linesep字符串給出當(dāng)前平臺(tái)使用的行終止符。例如,Windows使用'\r\n',Linux使用'\n'而Mac使用'\r'。,

12. os.curdir返回當(dāng)前目錄('.')

,

os.path.getsize(name):獲得文件大小,如果name是目錄返回0L

os.path.abspath(name):獲得絕對(duì)路徑

os.path.normpath(path):規(guī)范path字符串形式

os.path.join(path,name):連接目錄與文件名或目錄

os.path.basename(path):返回文件名

os.path.dirname(path):返回文件路徑

http://hi.baidu.com/jxq61/item/e52aaddb064cb43e49e1dd88

文件夾與文件

1,取得當(dāng)前目錄

s = os.getcwd()

# s 中保存的是函數(shù)得到當(dāng)前工作目錄,即當(dāng)前Python腳本工作的目錄路徑。

[python]view plaincopy

#?-*?-?coding:?UTF-8?-*?-

importos

importtime

#在工作目錄下創(chuàng)建一個(gè)“2012-08-06_13-20-29”這樣的文件夾

folder?=?time.strftime(r"%Y-%m-%d_%H-%M-%S",time.localtime())

os.makedirs(r'%s/%s'%(os.getcwd(),folder))

2,更改當(dāng)前目錄

os.chdir( "C:\\123")

#將當(dāng)前目錄設(shè)為 "C:\123", 相當(dāng)于DOC命令的 CD C:\123

#說明: 當(dāng)指定的目錄不存在時(shí),引發(fā)異常。

3,將路徑分離為目錄名與文件名

fpath, fname = os.path.split( "c:\\123\\456\\test.txt" )

print fpath

print fname

顯示:

c:\123\456

test.txt

#?事實(shí)上,如果你完全使用目錄,它也會(huì)將最后一個(gè)目錄作為文件名而分離,同時(shí)它不會(huì)判斷文件或目錄是否存在

4,將路徑分離為目錄文件名與擴(kuò)展名

fpathandname, fext = os.path.splitext( "c:\\123\\456\\test.txt" )

print fpathandname

print fext

顯示:

c:\123\456\test

.txt

5,判斷一個(gè)路徑( 目錄或文件)是否存在

b = os.path.exists( "c:\\123\\456\\test.txt")

返回值b: True 或 False

6,判斷一個(gè)路徑是否文件且存在

b = os.path.isfile( "c:\\123\\456\\test.txt")

返回值b: True 或 False

7,判斷一個(gè)路徑是否目錄且存在

b = os.path.isdir( "c:\\123\\456\\")

返回值b: True 或 False

8,獲取某目錄中的文件及子目錄的列表

L = os.listdir( "c:\\" )

print L

顯示 :

['1.avi', '1.jpg', '1.txt', 'CONFIG.SYS', 'Inetpub', 'IO.SYS', 'KCBJGDJC', 'KCBJGDYB', 'KF_GSSY_JC', 'MSDOS.SYS',?'MSOCache', 'NTDETECT.COM', 'ntldr', 'pagefile.sys', 'PDOXUSRS.NET', 'Program Files', 'Python24', 'Python31',?'QQVideo.Cache', 'RECYCLER', 'System Volume Information', 'TDDOWNLOAD', 'test.txt', 'WINDOWS']

# 這里面既有文件也有目錄

1 獲取某指定目錄下的所有子目錄的列表

[python]view plaincopy

defgetDirList(?p?):

p?=?str(?p?)

ifp=="":

return[?]

p?=?p.replace("/","\\")

ifp[?-1]?!="\\":

p?=?p+"\\"

a?=?os.listdir(?p?)

b?=?[?xforxinaifos.path.isdir(?p?+?x?)?]

returnb

printgetDirList("C:\\")

結(jié)果:

['Documents and Settings', 'Downloads', 'HTdzh', 'KCBJGDJC', 'KCBJGDYB', 'KF_GSSY_JC', 'MSOCache', 'Program Files',?'Python24', 'Python31', 'QQVideo.Cache', 'RECYCLER', 'System Volume Information', 'TDDOWNLOAD', 'WINDOWS']

2 獲取某指定目錄下的所有文件的列表

[python]view plaincopy

defgetFileList(?p?):

p?=?str(?p?)

ifp=="":

return[?]

p?=?p.replace("/","\\")

ifp[?-1]?!="\\":

p?=?p+"\\"

a?=?os.listdir(?p?)

b?=?[?xforxinaifos.path.isfile(?p?+?x?)?]

returnb

printgetFileList("C:\\")

結(jié)果:

['1.avi', '1.jpg', '1.txt', '123.txt', '12345.txt', '2.avi', 'a.py', 'AUTOEXEC.BAT', 'boot.ini', 'bootfont.bin',?'CONFIG.SYS', 'IO.SYS', 'MSDOS.SYS', 'NTDETECT.COM', 'ntldr', 'pagefile.sys', 'PDOXUSRS.NET', 'test.txt']

9,創(chuàng)建子目錄

os.makedirs( ? "C:\\123\\456\\789")

調(diào)用有可能失敗,可能的原因是:

(1) path 已存在時(shí)(不管是文件還是文件夾)

(2) 驅(qū)動(dòng)器不存在

(3) 磁盤已滿

(4)磁盤是只讀的或沒有寫權(quán)限

10,刪除子目錄

os.rmdir( "c:\\123\\456\\"?)

產(chǎn)生異常的可能原因:

(1) path 不存在

(2) path 子目錄中有文件或下級(jí)子目錄

(3) 沒有操作權(quán)限或只讀

# 測(cè)試該函數(shù)時(shí),請(qǐng)自已先建立子目錄。

11,刪除文件

os.remove( ?"c:\\123\\456\\test.txt" )

產(chǎn)生異常的可能原因:

(1) ? filename 不存在

(2) 對(duì)filename文件, 沒有操作權(quán)限或只讀。

12,文件改名

os.name( oldfileName, newFilename)

產(chǎn)生異常的原因:

(1) oldfilename 舊文件名不存在

(2) newFilename 新文件已經(jīng)存在時(shí),此時(shí),您需要先岀除 newFilename 文件

13,讀寫文件

[python]view plaincopy

#?-*?-?coding:?UTF-8?-*?-

#?!?/usr/bin/python

spath?="D:\\myapps\\python\\HelloWorld.txt"

f?=?open(spath,"w")

f.write("First?line?1.\n")

f.writelines("First?line?2.")

f.close()

f?=?open(spath,"r")

forlineinf:

print("每一行的數(shù)據(jù)是:%s"%?line)

f.close()

'''''

知識(shí)點(diǎn):?如何讀寫文件

'''

14,遍歷所有文件/目錄

[python]view plaincopy

#?-*?-?coding:?UTF-8?-*?-

#?!?/usr/bin/python

importos

importos.path

#?os,os.path里包含大多數(shù)文件訪問的函數(shù),所以要先引入它們.

#?請(qǐng)按照你的實(shí)際情況修改這個(gè)路徑

rootdir?="D:\\myapps\\python\\"

forparent,?dirnames,?filenamesinos.walk(rootdir):

#?case?1:

fordirnameindirnames:

print("?parent?is:?"+?parent)

print("?dirname?is:?"+?dirname)

#?case?2

forfilenameinfilenames:

print("?parent?is:?"+?parent)

print("?filename?with?full?path?:?"+?os.path.join(parent,?filename))

'''''?知識(shí)點(diǎn):

*?os.walk返回一個(gè)三元組.其中dirnames是所有文件夾名字(不包含路徑),filenames是所有文件的名字(不包含路徑).parent表示父目錄.

*?case1?演示了如何遍歷所有目錄.

*?case2?演示了如何遍歷所有文件.

*?os.path.join(dirname,filename)?:?將形如"/a/b/c"和"d.java"變成/a/b/c/d.java".

'''

15,分割路徑名與文件名

[python]view plaincopy

#?-*?-?coding:?UTF-8?-*?-

#?!?/usr/bin/python

importos.path

#?常用函數(shù)有三種:分隔路徑,找出文件名.找出盤符(windows系統(tǒng)),找出文件的擴(kuò)展名.

#?根據(jù)你機(jī)器的實(shí)際情況修改下面參數(shù).

spath?="D:\\myapps\\python\\1.py"

#?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)

'''''

知識(shí)點(diǎn):?這三個(gè)函數(shù)都返回二元組.

*?case1?分隔目錄和文件名

*?case2?分隔盤符和文件名

*?case3?分隔文件和擴(kuò)展名

'''

16,復(fù)制文件/文件夾

[python]view plaincopy

#?-*?-?coding:?UTF-8?-*?-

#?!?/usr/bin/python

importshutil

importos

importos.path

src?="D:\\myapps\\python\\2.py"

dst?="D:\\myapps\\python\\2.bak.py"

dst2="D:\\myapps\\2.bak2.py"

#判斷源文件是否存在,如果不存在則生成一個(gè)src測(cè)試文件

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()

#拷貝文件src到dst

shutil.copyfile(src,?dst)

shutil.copyfile(src,?dst2)

#讀取dst

f2?=?open(dst,"r")

forlineinf2:

print(line)

f2.close()

#?測(cè)試復(fù)制文件夾樹

try:

srcDir?="D:\\myapps"

dstDir?="D:\\myapps2"

#?如果dstDir已經(jīng)存在,那么shutil.copytree方法會(huì)報(bào)錯(cuò)!

#?這也意味著你不能直接用d:作為目標(biāo)路徑.

shutil.copytree(srcDir,?dstDir)

exceptException?as?err:

print(err)

'''''

知識(shí)點(diǎn):

*?shutil.copyfile:如何復(fù)制文件

*?os.path.exists:如何判斷文件夾是否存在

*?shutil.copytree:如何復(fù)制目錄樹

'''

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容