Python使用os模塊和fileinput模塊來操作文件目錄
os模塊
在python編程中,我們會經(jīng)常使用到文件和目錄,這些操作python提供一個os模塊,里面有很多操作文件和目錄的函數(shù).
下面介紹os的常用功能
1.獲取當前路徑
>>> os.getcwd() '/root/python'
2.獲取目錄中的內(nèi)容
>>> os.listdir(os.getcwd()) ['deco.py', '6.py', 'inputfile.py', 'uniFile.py', 'oddnogen.py', 'ospathex.py', 'operate.py', 'bianliang.py', 'typecheck1.py']
3.創(chuàng)建目錄
>>> os.mkdir('/root/pythontest')
一次性創(chuàng)建嵌套目錄可使用os.makedirs,makedirs可以生成多層遞歸目錄,removedirs可以刪除多層遞歸的空目錄,若目錄中有文件則無法刪除;os.system():運行shell命令;
>>> os.environ['HOME']
'/root'
>>> os.makedirs(os.path.join(os.environ['HOME'],'test','py'))
>>> os.system('ls -lR /root/test')
/root/test:
total 4
drwxr-xr-x 2 root root 4096 2013-03-29 17:27 py
/root/test/py:
total 0
0
4.改變工作目錄
>>> os.getcwd()
'/root/python'
>>> os.chdir('/etc')
>>> os.getcwd()
'/etc'
5.刪除目錄
>>> os.rmdir('/root/pythontest')
>>>
注:刪除目錄必須是空目錄
6.刪除文件
>>> os.remove('/root/pytest.py')
7.重命名文件或者目錄
>>> os.rename('/root/pytest.py','/root/test.py')
8.字符串給出當前平臺使用的終止符,例如:Windows使用'\r\n',Linux使用'\n'
>>> os.linesep '\n'
以下是os.path模塊
9.判斷是否是目錄
>>> os.path.isdir('/root/python')
True
10.判斷是否為文件
>>> os.path.isfile('/root/python')
False
11.返回一個路徑的目錄名和文件名
>>> os.path.split(os.getcwd())
('/root', 'python')
12.判斷是否存在文件或目錄name
>>> os.path.exists('/root')
True
>>> os.path.exists('/root/1.py')
False
13.獲得文件大小
>>> os.path.getsize('/root/python/if.py')
282
14.返回文件路徑,返回文件名
>>> os.path.dirname('/root/python/if.py')
'/root/python'
>>> os.path.basename('/root/python/if.py')
'if.py'
15.連接目錄與文件名或目錄
>>> os.path.join('/dave/test/','1.py')
'/dave/test/1.py'
判斷一個目錄里哪些是文件哪些是目錄.
>>> for file in os.listdir('/root/python'):
... if os.path.isdir(file):
... print file,"is a directory"
... else:
... print file,"is a file"
...
deco.py is a file
inputfile.py is a file
operate.py is a file
hello.pyc is a file
userpw.py is a file
4.py is a file
answer is a directory
fileinput模塊
fileinput模塊可以遍歷文本文件的所有行.它的工作方式和readlines很類似,不同點在于,它不是將全部的行讀到列表中而是創(chuàng)建了一個xreadlines對象.
下面是fileinput模塊中的常用函數(shù)
- input() #它會返回能夠用于for循環(huán)遍歷的對象.
- filename() #返回當前文件的名稱
- lineno() #返回當前(累計)的行數(shù)
- filelineno() #返回當前文件的行數(shù)
- isfirstline() #檢查當前行是否是文件的第一行
- close() #關閉序列
>>> import fileinput
>>> for eachline in fileinput.input("/root/datafile.txt"):
... print eachline
...
Dave
python
>>> for eachline in fileinput.input("/root/datafile.txt"):
... print fileinput.filename()
...
/root/datafile.txt
/root/datafile.txt
>>> for eachline in fileinput.input("/root/datafile.txt"):
... print fileinput.lineno(),eachline
...
1 Dave
2 python
>>> for eachline in fileinput.input("/root/datafile.txt"):
... if fileinput.isfirstline():
... print eachline
... else:
... break
...
Dave
下面是一個關于日志分析的小實例,將日志中截取匹配的電話號碼,如800-333-1212
root@10.1.1.45:~# cat telphone.log
027-987-1212
02187899682
021-110-9632
root@10.1.1.45:~# cat fileinputtest.py
#!/usr/bin/python2.5
import fileinput
import sys
import re
pattern = "\d{3}-\d{3}-\d{4}"
filePath = "/root/telphone.log"
for eachline in fileinput.input(filePath):
a = re.search(pattern,eachline)
if a:
# sys.stdout.write("============\n")
# sys.stdout.write(eachline)
print "============"
print 'line:',fileinput.lineno(),'filename:',fileinput.filename(),'length:',len(eachline.strip('\n')),eachline
root@10.1.1.45:~# ./fileinputtest.py
============
line: 1 filename: /root/telphone.log length: 12 027-987-1212
============
line: 3 filename: /root/telphone.log length: 12 021-110-9632
相關文章
Python爬蟲程序中使用生產(chǎn)者與消費者模式時進程過早退出的問題
本文主要介紹了Python爬蟲程序中使用生產(chǎn)者與消費者模式時進程過早退出的問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-01-01
用Python寫飛機大戰(zhàn)游戲之pygame入門(4):獲取鼠標的位置及運動
這篇文章主要介紹了用Python寫飛機大戰(zhàn)游戲之pygame入門(4):獲取鼠標的位置及運動,需要的朋友可以參考下2015-11-11
細數(shù)nn.BCELoss與nn.CrossEntropyLoss的區(qū)別
今天小編就為大家整理了一篇細數(shù)nn.BCELoss與nn.CrossEntropyLoss的區(qū)別,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-02-02
Python獲取數(shù)據(jù)庫數(shù)據(jù)并保存在excel表格中的方法
今天小編就為大家分享一篇Python獲取數(shù)據(jù)庫數(shù)據(jù)并保存在excel表格中的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-06-06

