Python處理文件的幾個常用小知識
Python處理文件的幾個常用小知識
Python 這門語言有個很大的用途就是使用它來進行文件處理,學會處理文件和保存數(shù)據(jù)可以讓你的程序使用起來更加容易和方便,因此小編為大家準備了幾個處理文件常用的幾個小知識,快來一起學習吧!
1 、讀取文件數(shù)據(jù)
文本文件可存儲的數(shù)據(jù)量非常豐富,像天氣數(shù)據(jù)、交通數(shù)據(jù)、文學作品等。每當我們需要分析或修改儲存在文件中的信息時,讀取文件就顯得尤為重要。想讀取一個文件的信息,我們可以一次性讀取全部內(nèi)容,也可以每次一行逐步讀取。
讀取整個文件
我們先來創(chuàng)建一個包含幾行文本的文件,在編輯器中輸入以下數(shù)據(jù)行,保存為 txt 格式:
- pi.txt:
 - 3.1415926535
 - 8979323846
 - 2643383279
 
打開并讀取該文件:
- with open('pi.txt') as file:
 - contents = file.read()
 - print(contents)
 
在這行程序中,出現(xiàn)了兩個函數(shù)open( )和read( )。
函數(shù)open( )用于打開一個文件,它接受的參數(shù)是要打開文件的名稱,Python 會在當前執(zhí)行的文件目錄中查找指定的文件,然后返回一個表示文件的對象。
方法read( ) 用于讀取這個文件的全部內(nèi)容,并將其作為一個長長的字符串儲存在變量contents中。但這段程序的運行結(jié)果大家可以嘗試一下,它會把這個文本的內(nèi)容全部輸出并在最后多出一行空行,這是因為read( )到達文件末尾時會返回一個空字符串,顯示在結(jié)果就是一個空行。如果想要刪除末尾的空行,可以在print中使用rstrip( ):
- print(contents.rstrip())
 
關(guān)于文件路徑,我們需要注意的是,Linux 系統(tǒng)和 windows 有一點不同:
在Linux和OS X中(使用斜杠/):
- with open('files/filename.txt') as file_object:
 
在Windows中(使用反斜杠\):
- with open('files\filename.txt') as file_object:
 
逐行讀取
如果想每次一行的讀取文件,可對文件對象使用for循環(huán):
- filename='pi.txt'
 - with open(filename) as file:
 - for line in file:
 - print(line)
 
同樣,為了刪除每一行多余出來的空行,我們可以使用rstrip( ):
- filename='pi.txt'
 - with open(filename) as file:
 - for line in file:
 - print(line.rstrip())
 
創(chuàng)建一個包含文件各行內(nèi)容的列表
當使用with時,open( )返回的文件對象只能在with代碼塊內(nèi)使用。如果想要在代碼塊外訪問文件內(nèi)容時,我們可以在with代碼塊內(nèi)將文件的各行儲存在一個列表中,并在with代碼塊外使用該列表訪問。
- filename='pi.txt'
 - with open(filename) as file:
 - lines = file.readlines()
 - for line in lines:
 - print(line.rstrip())
 
方法readlines( )表示從文件中讀取每一行,并將其儲存在一個列表中。
使用文件內(nèi)容
- filename='pi.txt'
 - with open(filename) as file:
 - lines = file.readlines()
 - ss=''
 - for line in lines:
 - ss += line.strip()
 - print(ss)
 
該程序運行結(jié)果為:3.141592653589793238462643383279
2 、寫入文件
寫入空文件
將文本寫入文件,可以在調(diào)用open( )時提供另一個實參。即打開文件時,可以指定需要的模式:'r'讀取模式,'w'寫入模式,'a'附加模式,'r+'讀取和寫入模式。python 默認只讀模式。
- with open(filename,'w') as file:
 - file.write("abcdefg")
 
注意:python 只能將字符串寫入文本文件,如果想把數(shù)值數(shù)據(jù)儲存到文本文件,必須先使用函數(shù)str( )將其轉(zhuǎn)為字符串格式。
寫入多行
- with open(filename,'w') as file:
 - file.write("abcdefg\n")
 - file.write("hijklmn\n")
 
存儲數(shù)據(jù)python中常使用json來存儲數(shù)據(jù)。json可以將簡單的python數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)存到文件中,并在程序再次運行時加載該文件中的數(shù)據(jù)。
JSON數(shù)據(jù)格式并非python專用,它是一種常用的數(shù)據(jù)格式,很有用,也易于學習。
json.dump( ) 和 json.load( )
這兩個函數(shù)分別用于儲存數(shù)據(jù)和加載數(shù)據(jù)。json.dump() 接受兩個實參:要儲存的數(shù)據(jù)和用于儲存數(shù)據(jù)的文件對象。json.load() 用于加載存儲在json文件中的信息。
- import json
 - num = [1,2,3,4,5]
 - filename = 'a.json'
 - with open(filename,'w') as f:
 - json.dump(num,f)
 
- with open(filename) as f:
 - num = json.load(f)
 - print(num)
 
這是一種在程序之間共享數(shù)據(jù)的簡單方式。
實現(xiàn)一個小功能
下面這個程序可以實現(xiàn)我們常常在游戲開頭時遇到的一個小功能,一起來試試吧!
- import json
 - # 如果以前儲存了用戶名就加載它,否則,就提示用戶輸入名字并存儲
 - filename = 'name.json'
 - try:
 - with open(filename) as f:
 - username=json.load(f)
 - except FileNotFoundError:
 - name = input("你叫什么名字?")
 - with open(filename,'w') as f:
 - json.dump(name,f)
 - print("我們會記住你的,"+name+"!")
 - else:
 - print("歡迎回來,"+name+"!")
 















 
 
 











 
 
 
 