python學習之-文件和對象

文件對象不僅可以用來訪問普通的磁盤文件,還能夠來訪問普通的磁盤文件,也可以訪問任何其他類型抽象層面的“文件”。內建函數 open() 返回一個文件對象,對該文件進行後續相關的操作都要用到它。

文件內建函數 open() 以及 file() 提供了初始化輸入/輸出(I/O)操作的通用接口。open() 內建函數成功打開文件後會返回一個文件對象,否則引發一個錯誤。當操作失敗,會產生一個IOERROR異常。內建函數 open() 的基本語法:
file_object = open(file_name, access_mode='r',buffering= -1)

file_name 是包含要打開的文件名字的字符串,它可以是相對路徑或者是絕對路徑。
下面舉例說明:

fp = open('/etc/motd')
fp = open('test.txt','w')
fp = open('data', 'r+')
fp = open(r'c: \io.sys','rb')

工廠函數 file()
open() file()函數具有相同的功能,可以任意替換。凡是可以使用 open() 的地方,都可以用 file() 來替換
文件內建方法
open() 成功執行並返回一個文件對象之後,所有對該文件的後續操作都將通過合格“句柄”進行。文件方法可以分爲四類:輸入輸出,文件內移及雜項。
輸入
read()方法用來直接讀取字節到字符串中,最多讀取給定數目個字節。如果沒有給定 size參數(默認值爲-1)或者 size 值爲負,文件將被讀取直至末尾。
readline() 方法並不像其他兩個輸入方法一樣返回一個字符串。它會讀取所有(剩餘的)行然後把它們作爲一個字符串列表返回。它的可選參數sizhint代表返回的最大字節大小。如果大於0,那麼返回的所有行應該大約有sizhint 字節(可能稍微大於這個數字,因爲需要湊齊緩衝區大小)

輸出
write() 內建方法的功能與 read() 和 readline() 相反。它把含有文本數據或二進制數據庫的字符串寫入文件中去。
和readlines()一樣,writelines() 方法是針對列表的操作,它接受一個字符串列表作爲參數,將它們寫入文件。行結束符並不會自動加入,所以如果需要的話,你必須在調用 writelines() 前給每行結尾加上結束符

文件內移動
seek() 方法可以在文件中一定文件指針到不同的位置。offset 字節代表相對於某個位置偏移量。位置的默認值爲 0 ,代表從開頭算起

文件迭代
一行一行訪問文件很簡單
for eachLegen in f:
    :
在這個循環裏面,eachLine代表文本文件的一行,可以用來做任何想做的事情。
close() 通過關閉文件來結束對它的訪問。python垃圾收集機制也會在文件對象的引用計數降至零的時候自動關閉文件。


在這個循環裏面,eachLine代表文本文件的一行,可以用來做任何想做的事情。
close() 通過關閉文件來結束對它的訪問。python垃圾收集機制也會在文件對象的引用計數降至零的時候自動關閉文件。


os 模塊屬性         描述
linesep                用於在文件中分隔行的字符串
sep                 用來分隔文件路徑名的字符串
pathsep                用於分割文件路徑的字符串
curdir                當前工作目錄的字符串名稱
pardir                父目錄字符串名稱



命令行參數

sys模塊通過 sys.argv 屬性提供了對命令行參數的訪問。命令行參數是調用某個程序時除程序名以外的其他參數。在python中,argv 變量代表一個從命令行上輸入的各個參數組成的字符串數組;argc變量代表輸入的參數個數。argc其實是sysargv列表的長度,而該列表的第一項sys.argv[0]永遠是程序的名稱
總結如下:
sys.argv 是命令行參數 的列表
len (sys.argv)是命令行參數的個數(也就是argc)
下面來個舉例

[root@pydb python]# cat e.py
import sys
print 'you entered', len(sys.argv), 'arguments...'
print 'they were: ', str(sys.argv)
[root@pydb python]# python e.py 76 tables 85 hawk
you entered 5 arguments...
they were:  ['e.py', '76', 'tables', '85', 'hawk']
[root@pydb python]# python e.py 34 python table sum
you entered 5 arguments...
they were:  ['e.py', '34', 'python', 'table', 'sum']
[root@pydb python]# python e.py  abc def
you entered 3 arguments...
they were:  ['e.py', 'abc', 'def']


文件系統

對文件系統的訪問大多通過python的os模塊實現。該模塊是python訪問操作系統的主要接口。os模塊實際上只是真正加載的模塊的前端,而真正的那個“模塊”明顯要依賴與具體的操作系統。
除了對進程和進程運行環境進行管理外,os 模塊還負責處理大部分的文件系統操作,應用程序開發人員可能要經常用到這些。包括刪除/重命名文件,遍歷目錄樹,以及管理文件訪問權限等。
os.path 模塊可以完成一些正對路徑名的的操作,它提供的函數可以完成管理和操作文件路徑名中的各個部分,獲取文件或子目錄信息,文件路徑查詢等操作。
這兩個模塊提供了與平臺和操作系統無關的統一文件系統訪問方法

os模塊的文件/目錄訪問函數

函數                     描述
文件處理 | 這裏的上標 a b c是表示版本號跟程序本身無關
mkfifo()/mknod()^a      創建命名管道/創建文件系統節點
remove()/unlink()      刪除文件
rename()/renames()^b 重命名文件
*stat^c()             返回文件信息
symlink()             創建符號鏈接
utime()                 更新時間戳
tmpfile()             創建並打開('w+b') 一個新的臨時文件
walk()                 生成一個目錄樹下的所有文件名

目錄/文件夾    
chdir/fchdir()          改變當前工作目錄/通過一個文件描述符改變當前工作目錄
chroot()             改變當前進程根目錄
getcwd()/getcwdu()     返回當前工作目錄/功能相同,但返回一個Unicode對象
mkdir()/makedirs()     創建目錄/創建多層目錄
rmdir/removedirs()     刪除目錄/刪除多層目錄

訪問/權限
access()              檢驗權限模式
chmod()                 改變權限模式
chown()/lchown         改變owner和group ID/功能相同,但不會跟蹤鏈接
umask()              設置默認權限

文件描述符操作        
open()                 底層的操作系統 open(對於文件,使用標準的內建 open() 函數)
read()/write()          根據文件描述符讀取/寫入數據
dup()/dup2()         複製文件描述符號/功能相同,但是是複製到另一個文件描述符

設備號
makedev()             從major和minor設備號創建一個原始設備號
major()/minor()         從原始設備號獲得 major/minor 設備號


os.path 模塊中的路徑名訪問函數

函數                     描述
basename()                去掉目錄路徑,返回文件名
dirname()                去掉文件名,返回目錄路徑
join()                    將分割的各部分組合成一個路徑名
split()                    返回(dirname(),BASENAME()) 元組
splitdrive()            返回(drivename,pathname) 元組
splitext()                返回 (filename, extension) 元組

信息
getatime()                返回最近訪問時間
getctime()                返回文件創建時間
getmtime()                返回最近文件修改時間
getsize()                返回文件大小(以字節爲單位)

查詢
exists()                指定路徑(文件或目錄)是否存在
isabs()                    指定路徑是否爲絕對路徑
isdir()                    指定路徑是否存在且爲一個目錄
isfile()                指定路徑是否存在且爲一個文件
islink()                指定路徑是否存在且爲一個符號鏈接
ismount()                指定路徑是否存在且爲一個掛載點
samefile()                兩個路徑名是否指向同一個文件


文件模塊暫時學到這裏,以後還要補充的。記錄下來方便以後看啊!

今天只學習了文件,內容比較少吧。或者說着章節內容比較多,大概看了剩下的了,十三章是對象了,對象後就算是開始進化了。好好思考和總結,接下來明天能否搞定這一章節再把函數搞定了?

如果能那就給力了。不過明天有活動,五一放假好多天啊。到時候好好打怪升級。

五一計劃:把對象和多線程還有網絡編程拿下,當然網絡編程只是接觸基礎的 。真本書本身就是基礎的吧。應用方面還要看其他書才能編寫。

以後多看前面寫的東西。多寫。

不知道是不是我以前寫腳本刷博客流量,然後被砍了,人氣那麼滴?最近好像只升沒降過。好好加油吧!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章