python 檔案讀取

2021-08-21 17:41:31 字數 4122 閱讀 2409

示例:

import os

with open('data.txt', encoding='utf-8') as file_obj:

contents = file_obj.read()

print(contents.rstrip())

首先,我們看下open函式的定義:

def open(file: union[str, bytes, int], mode: str = ..., buffering: int = ..., encoding: optional[str] = ...,              errors: optional[str] = ..., newline: optional[str] = ..., closefd: bool = ...) inferred type: (file: union[str, bytes, int], mode: str, buffering: int, encoding: optional[str], errors: optional[str], newline: optional[str], closefd: bool) -> io open file and return a stream. raise ioerror upon failure.
在一般情況下,我們開啟檔案只需要傳入檔案路徑即可,這裡我們讀取的檔案的內容是中文,為了避免亂碼,我們在這裡指定了編碼格式。其他的引數等我們用到的時候,在仔細說明。

open函式返回乙個表示檔案的物件,python會將這個物件儲存在我們的變數file_obj中,這樣我們就可以方便的操作了。

data.txt和我們的檔案在同一目錄下,所以直接使用名稱即可:

如果是其他路徑(非程式目錄),那麼直接使用絕對路徑:

我是在window的開發環境,以windows為例:

file_path = 'd:\data.txt'

with

open(file_path, encoding='utf-8') as file_obj:

read()方法讀取檔案的整個內容,並將其作為字串返回。

其他的我們先不做說明,先來看下檔案執行結果,是否將檔案內容成功讀取:

雖然我們的文字有點多,大家可以仔細看一下,就當回味一下高中生活了。

有些仔細一點的朋友可能發現了,這裡我們只是使用了open和read來開啟和讀取文字檔案,但是並沒有關閉檔案控制代碼,這一點有點奇怪,我們在其他的語言open和close總是成雙成對的出現的。

這裡的奧妙就在於with關鍵字,使用該關鍵字可以讓python去確定,我們在不需要訪問檔案的時候自動關閉檔案。也就是說我們只需要開啟和操縱檔案,python會在合適的機會關閉檔案。

我們在將檔案開啟後,列印一下這個file_obj到底有些什麼:

print(dir(file_obj))
輸出:

['_chunk_size', '__class__', '__del__', '__delattr__', '__dict__', '__dir__', '__doc__', '__enter__', '__eq__', '__exit__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '_

_init_subclass__', '__iter__', '__le__', '__lt__', '__ne__', '__new__', '__next__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '_checkclosed', '_checkreadable',

'_checkseekable', '_checkwritable', '_finalizing', 'buffer', 'close', 'closed', 'detach', 'encoding', 'errors', 'fileno', 'flush', 'isatty', 'line_buffering', 'mode', 'name', 'newlines', 'read', 'readable', 'readline',

'readlines', 'seek', 'seekable', 'tell', 'truncate', 'writable', 'write', 'writelines']

在逐行讀取文字的時候,常見的可以使用for迴圈來讀取:

with

open(file_path, encoding='utf-8') as file_obj:

forline

in file_obj:

print(line)

還有就是使用readline方法來逐行讀取檔案:

with

open(file_path, encoding='utf-8') as file_obj:

line = file_obj.readline()

while

line != '':

print(line)

line = file_obj.readline()

另外一種倒像是第二種的公升級版,它會一次性的將檔案逐行讀取存入乙個列表中,一遍我們使用:

with

open(file_path, encoding='utf-8') as file_obj:

lines = file_obj.readlines()

forline

inlines:

print(line)

lines 在**塊with之外也是可以使用的。

說了幾種常見的使用方法,我們來看下程式執行輸出:

d:\programs

\python

\helloworld

\venv

\scripts

\python.exe d:\programs

\python

\helloworld

\python_file.py

1234

2345

3456

4567

process finished with exit code 0

大家可以看到,我們讀取的資料沒有任何問題,但是每行資料之間都會存在多餘的空行,這是因為在檔案中每行的末尾都會有乙個看不見的換行符。如果我們希望去除這些多餘空行,可以使用rstrip()函式:

def rstrip(self, chars: optional[str] = ...) inferred type: (self: str, chars: optional[str]) -> str 

s.rstrip([chars]) -> str

return a copy of

thestring s with trailing whitespace removed. if chars is given and

not none, remove characters

inchars instead.

那麼上面的例子我們該這麼修改:

with

open(file_path, encoding='utf-8') as file_obj:

lines = file_obj.readlines()

forline

inlines:

print(line.rstrip())

輸出:

1234

2345

3456

4567

python高階讀取檔案 Python讀取檔案內容

開啟檔案之後,就可以讀取檔案的內容,檔案物件提供多種讀取檔案內容的方法。開啟test.txt檔案 f open test.txt r 開啟test.txt檔案 f.close 關閉檔案 test.txt檔案有以下內容 hello world.hello python.hello imooc.讀取若干...

Python檔案讀取

python提供了多種方法實現檔案讀取操作 1 read 2 readline 3 readlines 4 xreadlines 很多人也在糾結到底應該選擇哪種方式,甚至疑問在處理大檔案時應該選擇哪種方式,因為擔心檔案過大導致記憶體佔用率過高甚至無法完全載入。其實,這個問題是多餘的,在引入了迭代器和...

python檔案讀取

1.讀取txt檔案 read 讀取整行檔案 readline 讀取一行資料 readines 讀取所有行的資料 讀取txt檔案 user file open user info.txt r lines user file.readlines forline inlines username line...