python讀寫文件知識點

1、讀寫文件:


import os


os.path.join():單個文件和路徑上的文件名的字符串作爲參數,返回一個文件路徑的字符串,包含正確的路徑分隔符(其中雙斜槓,因爲每一個到斜槓需要轉義)


os.getcwd():獲取當前工作路徑的字符串
os.chdir():改變當前工作路徑函數


相對路徑 和 絕對路徑
相對路徑:它相對於程序的當前工作目錄
絕對路徑:總是從跟文件開始


單個句點(.)用作文件夾目名稱時,是”這個目錄的縮寫“
兩個句點(..)意思是父文件夾


os.makedirs():創建新的文件夾






2、處理絕對路徑和相對路徑


調用函數os.path.abspath(path):將返回參數的絕對路徑的字符串,這是將相對路徑轉化爲絕對路徑的簡便方法


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


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


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


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


絕對路徑的最後一個斜槓之前的是目錄名稱,之後是基本名稱


如果需要同事獲取一個路徑的目錄名稱和基本名稱,可以調用os.path.split(),獲得這兩個字符串的元組,或者分別調用os.path.dirname(path)和os.path.basename(path),將返回值放在元組內










>>> import os
>>> os.path.join('usr','bin','sqam')
'usr\\bin\\sqam'
>>> os.getcwd()
'C:\\Program Files (x86)\\Python36-32'
>>> os.makedirs('C:\\Users\\Nick\\Desktop\\python\\drawing\\1.doc')
>>> os.makedirs('C:\\Users\\Nick\\Desktop\\python\\drawing\\2\\3\\4\\5\\6')
>>> os.path.abspath('.')
'C:\\Program Files (x86)\\Python36-32'
>>> os.path.isabs('.')
False
>>> os.path.isabs('C:\\Program Files (x86)\\Python36-32')
True
>>> os.path.relpath('C:\\Windows','C:\Program Files (x86)\Python36-32')
'..\\..\\Windows'
>>> path = 'C:\\Program Files (x86)\\Python36-32'
>>> os.path.dirname('C:\\Program Files (x86)\\Python36-32')
'C:\\Program Files (x86)'
>>> os.path.basename('C:\\Program Files (x86)\\Python36-32')
'Python36-32'
>>> os.path.split('C:\\Program Files (x86)\\Python36-32')
('C:\\Program Files (x86)', 'Python36-32')








3、查看文件大小和文件內容


調用os.path.getsize(path):將返回path參數中文件的字節數


調用os.listdir(path):將返回文件名字符串的列表,包含path參數中的每個文件




>>> os.path.getsize('C:\\Users\\Nick\\Desktop\\python\\drawing\\shapes.py')
0
>>> os.path.getsize('C:\\Users\\Nick\\Desktop\\python\\drawing\\colors.py')
2
>>> totalSize = 0
>>> for filename in os.listdir('C:\\Windows\\System32'):
    totalSize = totalSize + os.path.getsize(os.path.join('C:\\Windows\\System32',filename))
>>> print(totalSize)
1111588492








4、檢查路徑有效性


調用os.path.exists(path):如果path參數所指的文件或者文件夾存在,將返回True,否則返回False


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


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






>>> os.path.exists('C:\\Windows\\System32')
True
>>> os.path.exists('C:\\Windows\\System321')
False
>>> os.path.isfile('C:\\Windows\\System32')
False
>>> os.path.isdir('C:\\Windows\\System32')
True






5、文件讀寫過程


用open()函數打開一個文件,需要傳遞一個字符串路徑(可以是絕對路徑也可以是相對路徑,)open函數返回的是一個File對象


File對象代表計算機中的一個文件,它只是Python中的另一類型的值


文件讀取


通過File對象調用read()函數,讀取文件內容,如果文件內容包含多行,返回字符串中通過“\n”分割
通過調用readlines()函數,返回一個字符串的列表,列表中的每一個字符串代表文件中的每一行,並且每一個字符串以\n結束




>>> openFile = open('C:\\Users\\Nick\\Desktop\\python\\drawing\\2\\1.txt')
>>> openFile.read()
'123'
>>> openFile1 = open('C:\\Users\\Nick\\Desktop\\python\\drawing\\2\\2.txt')
>>> openFile1.read()
'123\n456\n789\n098\n765\n432\n1'
>>> openFile1.readlines()
['123\n', '456\n', '789\n', '098\n', '765\n', '432\n', '1']




文件寫入


如果打開文件使用的是讀模式,就不能寫入文件,需要以“寫入純文本模式”或“添加純文本模式”打開文件,或者簡稱爲“寫模式”和“添加模式”


寫模式:將覆蓋原有的文件,從頭開始,就像用一個新值覆寫一個變量的值,將‘w’作爲第二個參數傳遞給open()函數,以寫模式打開文件


添加模式:將在已有的文件的末尾添加文本,可以認爲是向一個變量中的列表添加內容,而不是完全覆寫該變量,將‘a'作爲第二個參數傳遞給open()函數,以添加模式打開文件


如果傳遞給open()函數的文件名不存在,寫模式和添加模式都會創建一個新的空文件,在讀取和寫入文件後,需要調用close()方法,然後才能再次打開該文件


寫模式和添加模式均返回寫入的字符數目


>>> openFile = open('C:\\Users\\Nick\\Desktop\\python\\drawing\\2\\1.txt','w')
>>> openFile.write('ABC')
3
>>> openFile.close()
>>> openFile = open('C:\\Users\\Nick\\Desktop\\python\\drawing\\2\\1.txt')
>>> openFile.read()
'ABC'
>>> openFile = open('C:\\Users\\Nick\\Desktop\\python\\drawing\\2\\1.txt','a')
>>> openFile.write('12345678')
8
>>> openFile.close()
>>> openFile = open('C:\\Users\\Nick\\Desktop\\python\\drawing\\2\\1.txt')
>>> openFile.read()
'ABC12345678'
>>> openFile = open('C:\\Users\\Nick\\Desktop\\python\\drawing\\2\\3.txt','a')
>>> openFile.write('ABC\n12345678\n')
13
>>> openFile.close()
>>> openFile = open('C:\\Users\\Nick\\Desktop\\python\\drawing\\2\\3.txt')
>>> openFile.readlines()
['ABC\n', '12345678\n']








6、用shelve模塊保存變量


利用shelve模塊,可以將程序中的變量保存到二進制文件shelf中


要利用shelve模塊讀寫數據,就必須先導入它,調用函數shelve.open()並傳入一個文件名,然後將返回值保存在一個變量中,可以對這個變量的shelf值進行修改,就像它是字典一樣,,然後在這個值上調用close()方法


就像字典一樣,shelf值有keys()和alues()方法,返回shelf中的鍵和值類似於列表的值,因爲這些方法返回類似列表的值,所以應該將他們傳遞給list()函數,取得列表的形式




>>> import shelve
>>> shelfeFile = shelve.open('C:\\Users\\Nick\\Desktop\\python\\drawing\\2\\4')
>>> cats = ['big','black','sex']
>>> shelfFile['cats'] = cats
>>> shelfFile.close()
>>> shelfFile = shelve.open('C:\\Users\\Nick\\Desktop\\python\\drawing\\2\\4')
>>> shelfFile['cats']
['big', 'black', 'sex']
>>> shelfFile.close()
>>> shelveFile = shelve.open('C:\\Users\\Nick\\Desktop\\python\\drawing\\2\\4')
>>> list(shelveFile['cats'])
['big', 'black', 'sex']
>>> shelfFile.close()




7、pprint.pformat()函數保存變量


pprint.pprint()將列表或字典中中的元素“漂亮打印”到屏幕上,而pprint.pformat()函數返回同樣的文本字符串,但不是打印它,這個字符串不僅是易於閱讀的,同樣是語法上正確的Python代碼


由於import導入的模塊本身就是Python腳本,如果將pprint.pformat()的字符串保存爲一個.py的文件,該文件就是一個可以導入的模塊




>>> import os,pprint
>>> cats = [{'name':'Zophie','desc':'chubby'},{'name':'Pooka','desc':'fluffy'}]
>>> pprint.pformat(cats)
"[{'desc': 'chubby', 'name': 'Zophie'}, {'desc': 'fluffy', 'name': 'Pooka'}]"
>>> filrOne = open('C:\\Users\\Nick\\Desktop\\python\\drawing\\2\\myCats.py','w')
>>> filrOne.write('cats = '+pprint.pformat(cats)+'\n')
83
>>> filrOne.close()
>>> filrOne = open('C:\\Users\\Nick\\Desktop\\python\\drawing\\2\\myCats.py')
>>> filrOne.read()
"cats = [{'desc': 'chubby', 'name': 'Zophie'}, {'desc': 'fluffy', 'name': 'Pooka'}]\n"




由於import導入的模塊本身就是Python腳本,如果將pprint.pformat()的字符串保存爲一個.py的文件,該文件就是一個可以導入的模塊









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