1. 程式人生 > >Python中read()、readline()、readlines()之間的區別

Python中read()、readline()、readlines()之間的區別

1、read([size])

read([size]):從檔案當前位置起讀取size個位元組,若無引數,則預設讀取整個檔案。 返回值:一個str物件(將整個讀取的位元組拼接成一個字串,包括換行符、製表符)。

with open(‘file.txt’, 'r', encoding='utf-8') as f:
	lines = f.read()
	print(lines)

上面程式碼讀中lines為字串,有時我們需要的是將檔案中每行的內容作為一個元素儲存在列表中,這時可以使用字串內建函式.splitlines(),對字串進行分割。

with open(‘file.txt’, 'r', encoding='utf-8') as f:
	lines = f.read().splitelines()
	print(lines)

2、readlines()

readlines():讀取整個檔案並儲存在一個列表中,檔案中的每一行作為列表中的一個元素(包括‘\n’、‘\t’)。 返回值: list物件 由於讀取檔案時保留了每行結尾的換行符,可以使用strip()函式來去除每個元素的開頭和結尾的空格。

with open('file.txr', 'r',) as f:
	lines = f.readlines()
	lines = [line.strip() for line in lines if len(line.strip())]
	print(lines)

3、readline([size])

readline():

每次從檔案中讀取一行包括'\n'字元。如果size指定了一個非負數的引數,則返回指定大小的位元組數,包括 “\n” 字元。

with open(r'E:\文字分析\dataSet\12.text', 'r', encoding='utf-8') as f:
	while True:
		line = f.readline()
		if line:
			print(line)
		else:
			break

注意: 當檔案過大時,採用read()readlines()讀取時會佔用過多記憶體,甚至檔案大於可用記憶體時,讀取會出現異常。此時可使用readline()來讀取,但該方法讀取檔案時間要大於前兩種。

檔案讀取的最優方法

with open('file.txt', 'r') as f:
	for line in f:
		do_things(f)

使用open()函式建立的檔案物件是一個迭代器,因此可以使用for語句進行遍歷,每次讀取檔案的一行(包括’\n’)。 這種方法是文字檔案讀取的最佳選擇,它簡單、且對任意大小的檔案都有效,因為他不會一次性把整個檔案都載入到記憶體中。