[Python 3系列]讀寫檔案

來源:互聯網
上載者:User

標籤:file

檔案路徑

檔案有兩個關鍵屬性:“檔案名稱”和“路徑”。路徑指明了檔案在電腦上的位置。

在windows上,路徑書寫使用倒斜杠作為檔案夾之間的分隔字元。但在OS X和Linux上,使用正斜杠作為它們的路徑分隔字元。如果想要程式運行在所有作業系統上,在編寫python指令碼時,必須處理這兩種情況。

如果將單個檔案和路徑上的檔案夾名稱的字串傳遞給os.path.join()函數,它會返回一個檔案路徑的字串,包含正確的路徑分隔字元。

>>> import os>>> os.path.join(‘usr‘,‘local‘,‘src‘,‘mysql‘)‘usr/local/src/mysql‘


所有沒有從根資料夾開始的檔案名稱或路徑,都假定在當前工作目錄下。利用os.getcwd()函數,可以取得當前工作路徑的字串,並可以利用os.chdir()改變它。

如果要更改的當前工作目錄不存在,python就會顯示一個錯誤。

>>> import os>>> os.getcwd()‘/root‘>>> os.chdir(‘/usr/local/‘)>>> os.getcwd()‘/usr/local‘


可以用os.makedirs()函數建立新目錄。它會建立所有必要的中間檔案夾,目的是確保完整路徑名存在。

>>> import os>>> os.makedirs(‘/tmp/newdir‘)


絕對路徑和相對路徑

▎有兩種方法指定一個檔案路徑:

  “絕對路徑”,總是從根資料夾開始。

  “相對路徑”,它相對於程式的當前工作目錄。

"."用作檔案夾目錄名稱時,是“這個目錄”的縮寫。

".."的意思是父資料夾。

>>> os.getcwd()‘/usr/local‘>>> os.chdir(‘./src‘)>>> os.getcwd()‘/usr/local/src‘


os.path模組

os.path模組包含了許多與檔案名稱和檔案路徑相關的有用函數。因為os.path是os模組中的模組,所以只要執行import os就可以匯入它。

os.path模組提供了一些函數,返回一個相對路徑的絕對路徑,以及檢查給定的路徑是否為絕對路徑。

調用os.path.abspath(path)將返回參數的絕對路徑的字串。這是將相對路徑轉換為絕對路徑的簡便方法。

調用os.path.isabs(path),如果參數是1絕對路徑,就返回True,如果參數是一個相對路徑,就返回False。

調用os.path.relpath(path,start)將返回從start路徑到path的相對路徑的字串。如果沒有提供start,就使用當前工作目錄為開始路徑。

>>> os.path.abspath(‘./src‘)‘/usr/local/src‘>>> os.path.isabs(‘./src‘)False>>> os.path.relpath(‘/tmp/‘)‘../../tmp‘


調用os.path.dirname(path)將返回一個字串,它包含path參數中最後一個斜杠之前的所有內容。

調用os.path.basename(path)將返回一個字串,它包含path參數中最後一個斜杠之後的所有內容。

如果同時需要一個路徑的目錄名稱和基本名稱,就可以調用os.path.split(),獲得這兩個字串的元組。

os.path.split()不會接受一個檔案路徑並返回每個檔案夾的字串的列表。

split()字串方法將返回一個列表,包含該路徑的所有部分。如果向它傳遞os.path.sep,就能在所有作業系統上工作。

>>> os.path.dirname(‘/usr/local/src/mysql‘)‘/usr/local/src‘>>> os.path.basename(‘/usr/local/src/mysql‘)‘mysql‘>>> os.path.split(‘/usr/local/src/mysql‘)(‘/usr/local/src‘, ‘mysql‘)


調用os.path.getsize(path)將返回path參數中檔案的位元組數。

調用os.listdir(path)將返迴文件名字串的列表,包含path參數中的每個檔案。

>>> import os>>> os.path.getsize(‘/tmp/1.txt‘)1100>>> os.listdir(‘/tmp/‘)[‘.font-unix‘, ‘.X11-unix‘, ‘.ICE-unix‘, ‘.Test-unix‘, ‘.XIM-unix‘, ‘py.py‘, ‘bigfile‘, ‘yum_save_tx.2017-07-20.09-37.LxNivf.yumtx‘, ‘newdir‘, ‘1.txt‘]


os.path模組提供了一些函數,用於檢測給定的路徑是否存在,以及它是檔案還是檔案夾。

如果path參數所指的檔案或檔案夾存在,調用os.path.exists(path)將返回True,否則返回False。

如果path參數存在,並且是一個檔案,調用os.path.isfile(path)將返回True,否則返回False。

如果path參數存在,並且是一個檔案夾,調用os.path.isdir(path)將返回True,否則返回False。

利用os.path.exists()函數,可以確定DVD或快閃記憶體盤當前是否連在電腦上。

>>> os.path.exists(‘/tmp/1.txt‘)True>>> os.path.isfile(‘/tmp/1.txt‘)True>>> os.path.isdir(‘/tmp/1.txt‘)False


檔案讀寫過程

“純文字檔案”只包含基本文本字元,不包含字型、大小和顏色資訊。

“二進位檔案”是所有其他檔案類型,諸如文書處理文檔、PDF、映像、試算表和可執行程式。

▎在python中,讀寫檔案有3個步驟:

1、調用open()函數,返回一個File對象。

2、調用File對象的read()或write()方法。

3、調用File對象的close()方法,關閉該檔案。


在python中開啟檔案時,讀模式是預設的模式。“r”表示讀模式,“w”表示寫入模式,“a”表示添加模式。

如果傳遞給open()的檔案名稱不存在,寫入模式和添加模式都會建立一個新的空檔案。在讀取或寫入檔案後,調用close()方法,然後才能再次開啟該檔案。

如果將檔案內容看成是單個大字串,read()方法就返回儲存在該檔案中的這個字串。

也可以使用readlines()方法,從檔案取得一個字串的列表。列表中每個字串就是文本的每一行。

write()方法不會像print()函數1,在字串的末尾自動添加換行字元。必須自己添加該字元。

>>> readfile=open(‘/tmp/1.txt‘)>>> txt=readfile.read()>>> txt‘123~112313213\nroot:x:0:0:root:/root:/bin/bash\nbin:x:1:1:bin:/bin:/sbin/nologin\ndaemon:x:2:2:daemon:/sbin:/sbin/nologin\nadm:x:3:4:adm:/var/adm:/sbin/nologin\nlp:x:4:7:lp:/var/spool/lpd:/sbin/nologin\nsync:x:5:0:sync:/sbin:/bin/sync\nshutdown:x:6:0:shutdown:/sbin:/sbin/shutdown\nhalt:x:7:0:halt:/sbin:/sbin/halt\nmail:x:8:12:mail:/var/spool/mail:/sbin/nologin\noperator:x:11:0:operator:/root:/sbin/nologin\ngames:x:12:100:games:/usr/games:/sbin/nologin\nftp:x:14:50:FTP User:/var/ftp:/sbin/nologin\nnobody:x:99:99:Nobody:/:/sbin/nologin\nsystemd-bus-proxy:x:999:998:systemd Bus Proxy:/:/sbin/nologin\nsystemd-network:x:192:192:systemd Network Management:/:/sbin/nologin\ndbus:x:81:81:System message bus:/:/sbin/nologin\npolkitd:x:998:997:User for polkitd:/:/sbin/nologin\ntss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin\nsshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin\npostfix:x:89:89::/var/spool/postfix:/sbin/nologin\nchrony:x:997:995::/var/lib/chrony:/sbin/nologin\ntcpdump:x:72:72::/:/sbin/nologin\njuispan:x:1000:1000::/home/juispan:/bin/bash\n‘>>> readfile.close()


儲存變數

利用shelve模組,可以將python程式中的變數儲存到二進位的shelf檔案中。這樣,程式就可以從硬碟中恢複變數的資料。

shelve模組等於在程式中添加“儲存”和“開啟”功能。

shelf值不必用讀模式或寫入模式開啟,因為它們在開啟後,既能讀又能寫。

像字典一樣,shelf值有keys()和values()方法。會返回類似列表的值,而不是真正的列表。

>>> import shelve>>> shelFile=shelve.open(‘mydata‘)>>> price=[1,2,3]>>> shelFile[‘price‘]=price>>> shelFile.close()>>> shelFile=shelve.open(‘mydata‘)>>> type(shelFile)<class ‘shelve.DbfilenameShelf‘>>>> list(shelFile.keys())[‘price‘]>>> list(shelFile.values())[[1, 2, 3]]>>> shelFile[‘price‘][1, 2, 3]>>> shelFile.close()


可以用pprint.pformat()函數儲存變數。

import語句匯入的模組本身就是python指令碼。

>>> import pprint>>> price=[1,2,3,4,5]>>> pprint.pformat(price)‘[1, 2, 3, 4, 5]‘>>> pFile=open(‘pprice.py‘,‘w‘)>>> pFile.write(pprint.pformat(price))15>>> pFile.close()

通過匯入pprice.py模組能夠查看到檔案內容。建立一個.py檔案的好處在於,因為它是一個文字檔,所以任何人都可以用一個簡單的文字編輯器讀取和修改檔案的內容。但是,對於大多數應用,利用shelve模組來儲存資料,是將變數儲存到檔案的最佳方式。只有基礎資料型別 (Elementary Data Type),諸如整型、浮點型、字串、列表和字典,可以作為簡單文本寫入一個檔案。


本文出自 “技術員修鍊手冊” 部落格,請務必保留此出處http://juispan.blog.51cto.com/943137/1949918

[Python 3系列]讀寫檔案

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.