python对操作系统的目录和文件操作
生活随笔
收集整理的這篇文章主要介紹了
python对操作系统的目录和文件操作
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
一、獲取當(dāng)前目錄下的特定文件列表
>>>import glob,os
>>>curdir = os.getcwd()?? #獲取當(dāng)前目錄
>>>os.chdir(workdir)??????? #設(shè)置當(dāng)前目錄
>>>dir = glob.glob('*.dat')? #獲取當(dāng)前目錄的dat文件列表
>>>os.chdir(curdir)?????????? #還原當(dāng)前工作目錄
>>>print dir
['mudlog.dat','ddd.dat']
二、os模塊的文件和目錄操作函數(shù)
1.獲得當(dāng)前路徑
os.getcwd()?
??
>>> import os
>>> print 'current directory is ',os.getcwd()
current directory is? D:/Python25/Lib/site-packages/pythonwin
#這里是PythonWin的安裝目錄
2.獲得目錄中的內(nèi)容
os.listdir(path)???? path:要獲得內(nèi)容目錄的路徑。
>>> import os
>>> os.listdir(os.getcwd())??? # 獲得當(dāng)前目錄中的內(nèi)容
['dde.pyd', 'license.txt', 'Pythonwin.exe', 'scintilla.dll', 'win32ui.pyd',
'win32uiole.pyd', 'pywin']
3.創(chuàng)建目錄
os.mkdir(path)??? path:要?jiǎng)?chuàng)建目錄的路徑。
>>> import os
>>> os.mkdir('E://book//temp')?? # 使用os.mkdir創(chuàng)建目錄
4.刪除目錄
os.rmdir(path)?? path:要?jiǎng)h除的目錄的路徑。
>>> import os
>>> os.rmdir('E://book//temp')?? # 刪除目錄
需要說(shuō)明的是,使用os.rmdir刪除的目錄必須為空目錄,否則函數(shù)出錯(cuò)。
若想刪除非空目錄,先刪除目錄下的文件,然后再刪除目錄,遞歸過(guò)程。
5.判斷是否是目錄
os.path.isdir(path)??? path:要進(jìn)行判斷的路徑。
>>> import os
>>> os.path.isdir('E://book//temp')? # 判斷E:/book/temp是否為目錄
True?????????? # 表E:/book/temp是目錄
6.判斷是否為文件
os.path.isfile(path)?? path:要進(jìn)行判斷的路徑。
>>> import os
>>> os.path.isfile('E://book//temp')? # 判斷是否為文件
False?????????? # 表示E:/book/temp不是文件
三、批量重命名
在日常工作中經(jīng)常會(huì)遇到這樣的情況,需要將某個(gè)文件夾下的文件按照一定的規(guī)律重新命名。如果手工完成的話(huà),需要耗費(fèi)大量的時(shí)間,而且
容易出錯(cuò)。在學(xué)習(xí)Python以后,完全可以寫(xiě)一個(gè)簡(jiǎn)單的腳本完成這樣的工作。
import os
perfix = 'Python'????? # perfix 為重命名后的文件起始字符
length = 2???????? # length 為除去perfix后,文件名要達(dá)到的長(zhǎng)度
base = 1???????? # 文件名的起始數(shù)
format = 'mdb'?????? # 文件的后綴名
? # 函數(shù)PadLeft將文件名補(bǔ)全到指定長(zhǎng)度
# str 為要補(bǔ)全的字符
# num 為要達(dá)到的長(zhǎng)度
# padstr 為達(dá)到長(zhǎng)度所添加的字符
def PadLeft(str , num , padstr):
stringlength = len (str)
n = num - stringlength
if n >=0 :
str=padstr * n + str
return str
? # 為了避免誤操作,這里先提示用戶(hù)
print 'the files in %s will be renamed' % os.getcwd()
input = raw_input('press y to continue/n') # 獲取用戶(hù)輸入
if input != 'y':?????? # 判斷用戶(hù)輸入,以決定是否執(zhí)行重命名操作
exit()
filenames = os.listdir(os.curdir)?? # 獲得當(dāng)前目錄中的內(nèi)容
? # 從基數(shù)減1,為了使下邊 i = i + 1在第一次執(zhí)行時(shí)等于基數(shù)
i = base - 1
for filename in filenames:??? # 遍歷目錄中內(nèi)容,進(jìn)行重命名操作
i = i+1
? # 判斷當(dāng)前路徑是否為文件,并且不是“rename.py”
if filename != "rename.py" and os.path.isfile(filename):
name = str(i)????? # 將i轉(zhuǎn)換成字符
name = PadLeft(name,length,'0') # 將name補(bǔ)全到指定長(zhǎng)度
t = filename.split('.')?? # 分割文件名,以檢查其是否是所要修改的類(lèi)型
m = len(t)
if format == '':???? # 如果未指定文件類(lèi)型,則更改當(dāng)前目錄中所有文件
os.rename(filename,perfix+name+'.'+t[m-1])
else:??????? # 否則只修改指定類(lèi)型
if t[m-1] == format:
os.rename(filename,perfix+name+'.'+t[m-1])
else:
i = i – 1???? # 保證i連續(xù)
else:
i = i – 1?????? # 保證i連續(xù)
四、代碼框架生成器
編寫(xiě)代碼要養(yǎng)成良好的習(xí)慣,為了使腳本更具可讀性,往往需要添加注釋,而且還應(yīng)該在腳本頭添加基本的說(shuō)明,如作者、文件名、日期、用途、版權(quán)說(shuō)明,以及所 需要使用的模塊等信息。這樣,不僅便于保存腳本,而且也便于交流。但是,如果每次編寫(xiě)一個(gè)腳本就依次添加這樣的信息,不免有些麻煩,以下代碼實(shí)現(xiàn)了一個(gè)簡(jiǎn) 單的代碼框架生成器。
# -*- coding:utf-8 -*-
# file: MakeCode.py
#
import os
import sys
import string
import datetime
# python腳本模板
py = '''#-----------------------------------------------------
# TO:??????
#-----------------------------------------------------
# BY:
#-----------------------------------------------------
'''
# c模板
c = ''' *-----------------------------------------------------
* TO:??????
*-----------------------------------------------------
* BY:
*-----------------------------------------------------
'''
if os.path.isfile(sys.argv[1]):?? # 判斷要?jiǎng)?chuàng)建的文件是否存在,如果存在則退出腳本
print '%s already exist!' % sys.argv[1]
sys.exit()
file = open(sys.argv[1], 'w')??? # 創(chuàng)建文件
today = datetime.date.today()??? # 獲得當(dāng)前日期,并格式化為xxxx-xx-xx的形式
date = today.strftime('%Y')+'-'+today.strftime('%m')+'-'+today.strftime('%d')
filetypes = string.split(sys.argv[1],'.') # 判斷將創(chuàng)建的文件是什么類(lèi)型以便對(duì)其分別處理
length = len(filetypes)
filetype = filetypes[length - 1]
if filetype == 'py':
print 'use python mode'
file.writelines('# -*- coding:utf-8 -*-')
file.write('/n')
file.writelines('# File: ' + sys.argv[1])
file.write('/n')
file.write(py)
file.write('# Date: ' + date)
file.write('/n')
file.write('#-----------------------------------------------------')
elif filetype == 'c' or filetype == 'cpp':
print 'use c mode'
file.writelines(' /n')
else:
print 'just create %s' % sys.argv[1]
file.close()??????? # 關(guān)閉文件
寫(xiě)好的腳本可以放到Windows的系統(tǒng)目錄中,這樣就可以隨時(shí)運(yùn)行,方便地在目錄中產(chǎn)生Python腳本或者C/C++文件。
五、運(yùn)行其他程序
在Python中可以方便地使用os模塊運(yùn)行其他的腳本或者程序,這樣就可以在腳本中直接使用其他腳本,或者程序提供的功能,而不必再次編寫(xiě)實(shí)現(xiàn)該功能的代碼。
使用os.system函數(shù)運(yùn)行其他程序
os模塊中的system()函數(shù)可以方便地運(yùn)行其他程序或者腳本。其函數(shù)原型如下所示。
os.system(command)????? command :要執(zhí)行的命令,相當(dāng)于在Windows的cmd窗口中輸入的命令。如果要向程序或者腳本傳遞參數(shù),可以使用空格分隔程序及多個(gè)參數(shù)。
以下實(shí)例實(shí)現(xiàn)通過(guò)os.system()函數(shù)打開(kāi)系統(tǒng)的記事本程序。
>>> import os
# 使用os.system()函數(shù)打開(kāi)記事本程序
>>> os.system('notepad')
0 # 關(guān)閉記事本后的返回值
# 向記事本傳遞參數(shù),打開(kāi)python.txt文件
>>> os.system('notepad python.txt')
轉(zhuǎn)載于:https://www.cnblogs.com/keepfocus/archive/2012/07/14/2591606.html
總結(jié)
以上是生活随笔為你收集整理的python对操作系统的目录和文件操作的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 201C Fragile Bridges
- 下一篇: TIOBE Programming Co