python對操作系統的目錄和文件操作

一、獲取當前目錄下的特定文件列表

>>>import glob,os
>>>curdir = os.getcwd()?? #獲取當前目錄

>>>os.chdir(workdir)??????? #設置當前目錄

>>>dir = glob.glob('*.dat')? #獲取當前目錄的dat文件列表

>>>os.chdir(curdir)?????????? #還原當前工作目錄

>>>print dir
['mudlog.dat','ddd.dat']


二、os模塊的文件和目錄操作函數
1.獲得當前路徑
os.getcwd()
? 該函數不需要傳遞參數,它返回當前的目錄。
?
>>> import os
>>> print 'current directory is ',os.getcwd()
current directory is? D:/Python25/Lib/site-packages/pythonwin
#這里是PythonWin的安裝目錄

2.獲得目錄中的內容
os.listdir(path)???? path:要獲得內容目錄的路徑。

>>> import os
>>> os.listdir(os.getcwd())??? # 獲得當前目錄中的內容
['dde.pyd', 'license.txt', 'Pythonwin.exe', 'scintilla.dll', 'win32ui.pyd',
'win32uiole.pyd', 'pywin']

3.創建目錄
os.mkdir(path)??? path:要創建目錄的路徑。

>>> import os
>>> os.mkdir('E://book//temp')?? # 使用os.mkdir創建目錄

4.刪除目錄
os.rmdir(path)?? path:要刪除的目錄的路徑。

>>> import os
>>> os.rmdir('E://book//temp')?? # 刪除目錄

需要說明的是,使用os.rmdir刪除的目錄必須為空目錄,否則函數出錯。

若想刪除非空目錄,先刪除目錄下的文件,然后再刪除目錄,遞歸過程。

5.判斷是否是目錄
os.path.isdir(path)??? path:要進行判斷的路徑。

>>> import os
>>> os.path.isdir('E://book//temp')? # 判斷E:/book/temp是否為目錄
True?????????? # 表E:/book/temp是目錄

6.判斷是否為文件
os.path.isfile(path)?? path:要進行判斷的路徑。

>>> import os
>>> os.path.isfile('E://book//temp')? # 判斷是否為文件
False?????????? # 表示E:/book/temp不是文件


三、批量重命名

在日常工作中經常會遇到這樣的情況,需要將某個文件夾下的文件按照一定的規律重新命名。如果手工完成的話,需要耗費大量的時間,而且

容易出錯。在學習Python以后,完全可以寫一個簡單的腳本完成這樣的工作。

import os
perfix = 'Python'????? # perfix 為重命名后的文件起始字符
length = 2???????? # length 為除去perfix后,文件名要達到的長度
base = 1???????? # 文件名的起始數
format = 'mdb'?????? # 文件的后綴名

# 函數PadLeft將文件名補全到指定長度
# str 為要補全的字符
# num 為要達到的長度
# padstr 為達到長度所添加的字符
def PadLeft(str , num , padstr):
stringlength = len (str)
n = num - stringlength
if n >=0 :
str=padstr * n + str
return str

# 為了避免誤操作,這里先提示用戶
print 'the files in %s will be renamed' % os.getcwd()
input = raw_input('press y to continue/n') # 獲取用戶輸入
if input != 'y':?????? # 判斷用戶輸入,以決定是否執行重命名操作
exit()
filenames = os.listdir(os.curdir)?? # 獲得當前目錄中的內容

# 從基數減1,為了使下邊 i = i + 1在第一次執行時等于基數
i = base - 1
for filename in filenames:??? # 遍歷目錄中內容,進行重命名操作
i = i+1

# 判斷當前路徑是否為文件,并且不是“rename.py”
if filename != "rename.py" and os.path.isfile(filename):
name = str(i)????? # 將i轉換成字符
name = PadLeft(name,length,'0') # 將name補全到指定長度
t = filename.split('.')?? # 分割文件名,以檢查其是否是所要修改的類型
m = len(t)
if format == '':???? # 如果未指定文件類型,則更改當前目錄中所有文件
os.rename(filename,perfix+name+'.'+t[m-1])
else:??????? # 否則只修改指定類型
if t[m-1] == format:
os.rename(filename,perfix+name+'.'+t[m-1])
else:
i = i – 1???? # 保證i連續
else:
i = i – 1?????? # 保證i連續


四、代碼框架生成器
編寫代碼要養成良好的習慣,為了使腳本更具可讀性,往往需要添加注釋,而且還應該在腳本頭添加基本的說明,如作者、文件名、日期、用途、版權說明,以及所需要使用的模塊等信息。這樣,不僅便于保存腳本,而且也便于交流。但是,如果每次編寫一個腳本就依次添加這樣的信息,不免有些麻煩,以下代碼實現了一個簡單的代碼框架生成器。

# -*- 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]):?? # 判斷要創建的文件是否存在,如果存在則退出腳本
print '%s already exist!' % sys.argv[1]
sys.exit()
file = open(sys.argv[1], 'w')??? # 創建文件
today = datetime.date.today()??? # 獲得當前日期,并格式化為xxxx-xx-xx的形式
date = today.strftime('%Y')+'-'+today.strftime('%m')+'-'+today.strftime('%d')
filetypes = string.split(sys.argv[1],'.') # 判斷將創建的文件是什么類型以便對其分別處理
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()??????? # 關閉文件

寫好的腳本可以放到Windows的系統目錄中,這樣就可以隨時運行,方便地在目錄中產生Python腳本或者C/C++文件。


五、運行其他程序
在Python中可以方便地使用os模塊運行其他的腳本或者程序,這樣就可以在腳本中直接使用其他腳本,或者程序提供的功能,而不必再次編寫實現該功能的代碼。
使用os.system函數運行其他程序
os模塊中的system()函數可以方便地運行其他程序或者腳本。其函數原型如下所示。
os.system(command)????? command :要執行的命令,相當于在Windows的cmd窗口中輸入的命令。如果要向程序或者腳本傳遞參數,可以使用空格分隔程序及多個參數。

以下實例實現通過os.system()函數打開系統的記事本程序。

>>> import os
# 使用os.system()函數打開記事本程序
>>> os.system('notepad')
0 # 關閉記事本后的返回值
# 向記事本傳遞參數,打開python.txt文件
>>> os.system('notepad python.txt')

From:http://book.51cto.com/art/200710/58166.htm

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/445199.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/445199.shtml
英文地址,請注明出處:http://en.pswp.cn/news/445199.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

常見漏洞

Cookie without HttpOnly flag set 如果在Cookie上設置了HttpOnly屬性,則客戶端JavaScript無法讀取或設置Cookie的值。 這種措施通過阻止某些客戶端攻擊(例如跨站點腳本),通過阻止它們通過注入的腳本來簡單地捕獲cookie的值&…

python函數星號參數

2011-09-01 17:35 2人閱讀 評論(0) 收藏 編輯 刪除 今天有個工作是導出一個函數給腳本用 我自已先要測一下 先要客戶端發送一個消息給服務器 看了下C部分的代碼,如下 "def onNetMessage(self,playerID, msgName,msgParam):\n" //客戶端調用服務器腳本 " …

MachineLearning(3)-流型

流型-manifold在很多機器學習的文章中會見到“嵌入在高維空間的低維流型”這樣的字眼,下記錄一些重要概念。參考資料:https://blog.csdn.net/sinat_32043495/article/details/789977581.流型 局部具有歐幾里得空間性質的空間(流型就是一個空間…

C/C++常見面試題(四)

C/C面試題集合四 目錄 1、什么是C中的類?如何定義和實例化一個類? 2、請解釋C中的繼承和多態性。 3、什么是虛函數?為什么在基類中使用虛函數? 4、解釋封裝、繼承和多態的概念,并提供相應的代碼示例 5、如何處理內…

機器學習問題總結(03)

文章目錄1.struct和class區別,你更傾向用哪個2.kNN,樸素貝葉斯,SVM的優缺點,各種算法優缺點2.1 KNN算法2.2 樸素貝葉斯2.3SVM算法2.4 ANN算法2.5 DT算法3. 10億個整數,1G內存,O(n)算法,統計只出…

python源代碼現成重用大全

Nullege is a search engine for Python source code. http://nullege.com/

redis——新版復制

sync雖然解決了數據同步問題,但是在數據量比較大情況下,從庫斷線從來依然采用全量復制機制,無論是從數據恢復、寬帶占用來說,sync所帶來的問題還是很多的。于是redis從2.8開始,引入新的命令psync。 psync有兩種模式&a…

Python(23)-面向對象2-繼承,多態

面向對象基本概念2--繼承、多態1.繼承基本概念2.子類重寫父類方法2.1完全重寫2.2擴展父類方法--super()3.多繼承4.新式類和舊式類5.多態基本概念6.類屬性、類方法-classmethod6.1類屬性6.2類方法classmethod7.靜態方法staticmethod8.案例分析本系列博文來自學習《Python基礎視頻…

Linux Linux 集群

Linux 集群 Page navigation 什么是集群?集群分類基于 Linux 的集群Linux 服務器集群系統Linux 高性能計算集群集群系統 MOSIX構建 Linux 集群IBM 與 Linux 集群 本專題收集了 Linux 集群相關的文章和教程。 什么是集群? 簡單的說,集群(cluster&#x…

機器學習問題總結(04)

文章目錄1、MLP的BP過程2、maxpool層BP怎么做的2.1 **mean pooling**2.2 max pooling3、opencv遍歷像素的方式,講兩種?4、傳統圖像處理有了解過嗎,比如去噪 特征提取5、問在linux下寫過代碼嗎? 問用了什么軟件工具6、LDA&#xff…

持續更新的Zookeeper知識總結

簡介 Zookeeper為分布式應用 提供了高效且可靠的分布式協調服務,提供了諸如統一命名服務、發布訂閱、負載均衡、配置管理和分布式鎖等分布式的基礎服務。 設計目標是將那些復雜且容易出錯的分布式一致性服務封裝起來,構成一個高效可靠的原語集&#xf…

Python(24)-面向對象3-可迭代類對象Pokemon

面向對象3-Pokemon demo1.可迭代類對象1.可迭代類對象 想要實現類對象中某些屬性/數值的迭代訪問,需要在類中定義一個__iter__()方法,和__next__() 的方法(python 2 中為next()方法)。 _iter_()返回值是self, _next_()中遍歷完所有的元素后發…

機器學習問題總結(05)

文章目錄1. Hadoop、Spark1.1 hadoop1.2 spark1.3 MapReduce1.3.1 概念1.3.1 MapReduce執行流程2、機器學習場景3、推薦系統(預測電影等級)4、CTR(點擊通過率 -> 廣告)5、SVM5.1 svm的原理5.2 SVM的核技巧6、K-means6.1 K-mean…

基于Socket的UDP和TCP編程介紹

一、概述 TCP(傳輸控制協議)和UDP(用戶數據報協議是網絡體系結構TCP/IP模型中傳輸層一層中的兩個不同的通信協議。 TCP:傳輸控制協議,一種面向連接的協議,給用戶進程提供可靠的全雙工的字節流,TCP套接口是字節流套接口(streamsocket)的一種。 UDP:用戶數據報協議。U…

Python(25)-單例設計模式

單例設計模式1.單例設計模式2.__new__方法3.初始動作只執行一次本系列博文來自學習《Python基礎視頻教程》筆記整理,視屏教程連接地址:http://yun.itheima.com/course/273.html1.單例設計模式 設計模式:不同的問題使用不同的解決套路。學習設…

Linux Socket通信 C/S模型

代碼片段(8) [代碼] MySocket.h 01#ifndef _MYSOCKET_0623_H 02#define _MYSOCKET_0623_H 03 04#include <sys/socket.h> 05#include <sys/types.h> 06#include <arpa/inet.h> 07#include <netinet/in.h> 08#include <sys/wait.h> 09#include &…

Java多線程——基本概念

線程和多線程 程序&#xff1a;是一段靜態的代碼&#xff0c;是應用軟件執行的藍本 進程&#xff1a;是程序的一次動態執行過程&#xff0c;它對應了從代碼加載、執行至執行完畢的一個完整過程&#xff0c;這個過程也是進程本身從產生、發展至消亡的過程 線程&#xff1a;是比…

textCNN初探

文章目錄目錄1.什么是textCNN1.1 textCNN 提出的背景1.2 textCNN 合理性分析2.textCNN相比于傳統圖像領域的CNN有什么特點&#xff1f;3.textCNN例子講解3.1 參數和超參數3.2 textCNN的數據3.3 textCNN的網絡結構定義3.4 代碼目錄 1.什么是textCNN 1.1 textCNN 提出的背景 我…

Python(28)-異常

異常1.拋出異常2.捕獲異常3.依據錯誤類型捕獲異常4.捕獲未知錯誤5.異常捕獲的完整語法6.異常傳遞7.主動拋出異常本系列博文來自學習《Python基礎視頻教程》筆記整理&#xff0c;視屏教程連接地址&#xff1a;http://yun.itheima.com/course/273.html1.拋出異常 拋出異常&#…

詞嵌入初探

文章目錄目錄1.詞嵌入產生的背景1.1 NLP關鍵&#xff1a;語言的表示1.2 NLP詞的表示方法類型1.2.1 獨熱表示one-hot1.2.2 詞的分布式表示distributed representation1.3 NLP中的語言模型1.4 詞的分布表示1.4.1 基于矩陣的分布表示1.4.2 基于聚類的分布表示1.4.3 基于神經網絡的…