python之IO操作

來源:互聯網
上載者:User

標籤:

檔案讀寫

在Python中,檔案讀寫是通過open()函數開啟的檔案對象完成的。使用with語句操作檔案IO是個好習慣。

try:    f = open(‘1.txt‘, ‘r‘)  #rb寫二進位    #f = open(‘1.txt‘, ‘w‘)  #wb讀二進位    f.read().decode(‘utf8‘)    #f.write(‘test‘).encode(‘utf8‘)finally:    if f:        f.close()用with寫:with open(‘1.txt‘, ‘r‘) as f:    print f.read()

如果檔案很小,read()一次性讀取最方便;如果不能確定檔案大小,反覆調用read(size)比較保險;如果是設定檔,調用readlines()最方便

 

目錄操作

把兩個路徑合成一個時,不要直接拼字串,而要通過os.path.join()函數,這樣可以正確處理不同作業系統的路徑分隔字元
同樣的道理,要拆分路徑時,也不要直接去拆字串,而要通過os.path.split()函數,這樣可以把一個路徑拆分為兩部分,後一部分總是最後層級的目錄或檔案名稱

得到當前工作目錄,即當前Python指令碼工作的目錄路徑: os.getcwd()返回指定目錄下的所有檔案和目錄名:os.listdir()檢驗給出的路徑是否是一個檔案:os.path.isfile()檢驗給出的路徑是否是一個目錄:os.path.isdir()判斷是否是絕對路徑:os.path.isabs()檢驗給出的路徑是否真地存:os.path.exists()返回一個路徑的目錄名和檔案名稱:os.path.split()      分離副檔名:os.path.splitext()擷取路徑名:os.path.dirname()擷取檔案名稱:os.path.basename()擷取檔案屬性:os.stat(file)給出當前平台使用的行終止符:os.linesep    Windows使用‘\r\n‘,Linux使用‘\n‘而Mac使用‘\r‘建立空檔案os.mknod("test.txt")        建立目錄os.mkdir("file")                   複製檔案shutil.copyfile("oldfile","newfile")    #oldfile和newfile都只能是檔案shutil.copy("oldfile","newfile")        #oldfile只能是檔案夾,newfile可以是檔案,也可以是目標目錄複製檔案夾shutil.copytree("olddir","newdir")      #olddir和newdir都只能是目錄,且newdir必須不存在移動檔案/目錄shutil.move("oldpos","newpos")   重新命名檔案/目錄os.rename("oldname","newname")       刪除檔案os.remove("file")刪除目錄os.rmdir("dir")    #只能刪除空目錄shutil.rmtree("dir")    #空目錄、有內容的目錄都可以刪轉換目錄os.chdir("C:\\123")   #將目前的目錄設為 "C:\123", 相當於DOC命令的 CD C:\123 

 

file-like Object

像open()函數返回的這種有個read()方法的對象,在Python中統稱為file-like Object。除了file外,還可以是記憶體的位元組流,網路流,自訂流等等。file-like Object不要求從特定類繼承,只要寫個read()方法就行。

StringIO就是在記憶體中建立的file-like Object,常用作臨時緩衝。

 

序列化

把變數從記憶體中變成可儲存或傳輸的過程稱之為序列化,在Python中叫pickling,在其他語言中也被稱之為serialization,marshalling,flattening等等,都是一個意思。
反過來,把變數內容從序列化的對象重新讀到記憶體裡稱之為還原序列化,即unpickling。

如果我們要在不同的程式設計語言之間傳遞對象,就必須把對象序列化為標準格式,例如JSON

JSON和Python內建的資料類型對應如下:

JSON類型 Python類型
{} dict
[] list
"string" ‘str‘或u‘unicode‘
1234.56 int或float
true/false True/False
null None

 

 

 

 

 

       

     

對於單一資料型別(string、unicode、int、float、list、tuple、dict),可以直接處理。

序列化
dumps()方法返回一個str,內容就是標準的JSON。
dump()方法可以直接把JSON寫入一個file-like Object。

還原序列化
loads()把JSON的字串還原序列化
load()從file-like Object中讀取字串並還原序列化

>>> import json>>> d = dict(name=‘David‘, age=20, score=100)>>> d_encode = json.dumps(d)>>> d_encode‘{"age": 20, "score": 100, "name": "David"}‘>>> with open(‘D:\\1.txt‘, ‘wb‘) as f:    d_encode_file = json.dump(d, f)>>> d_decode = json.loads(d_encode)>>> d_decode{u‘age‘: 20, u‘score‘: 100, u‘name‘: u‘David‘}>>> with open(‘D:\\1.txt‘, ‘rb‘) as f:    d_decode_file = json.load(f)   >>> d_decode_file{u‘age‘: 20, u‘score‘: 100, u‘name‘: u‘David‘}

 

將class的執行個體對象encode,decode為json

import jsonclass Student(object):    def __init__(self, name, age, score):        self.name = name        self.age = age        self.score = scoredef student2dict(std):    return {        ‘name‘: std.name,        ‘age‘: std.age,        ‘score‘: std.score    }def dict2student(d):    return Student(d[‘name‘], d[‘age‘], d[‘score‘])s = Student(‘David‘, 20, 100)print(json.dumps(s, default=student2dict))#選擇性參數default就是把任意一個對象變成一個可序列為JSON的對象json_str = ‘{"age": 20, "score": 88, "name": "Bob"}‘print(json.loads(json_str, object_hook=dict2student))#loads()方法首先轉換出一個dict對象,傳入的object_hook函數負責把dict轉換為Student執行個體

 

2015-05-10

python之IO操作

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.