【Python】從文件中讀取數據

從文件中讀取數據

1.1 讀取整個文件python

要讀取文件,須要一個包含幾行文本的文件(文件PI_DESC.txt與file_reader.py在同一目錄下spa

PI_DESC.txtcode

3.1415926535
  8979323846
  2643383279
  5028841971

file_reader.py對象

with open("PI_DESC.txt") as file_object:
    contents = file_object.read()
    print(contents)

咱們能夠看出,讀取文件時,並無使用colse()方法,那麼未妥善的關閉文件,會不會致使文件收到損壞呢?在這裏是不會的,由於咱們在open()方法前邊引入了關鍵字with,該關鍵字的做用是:在不須要訪問文件後將其關閉blog

1.2文件路徑ip

程序在讀取文本文件的時候,若是不給定路徑,那麼它會先在當前目錄下進行檢索,有時候咱們須要讀取其餘文件夾中的路徑,例如:內存

image

如今文件PI_DESC.txt存儲在文件夾txt中get

那麼咱們讀取文本內容的代碼得修改成:it

with open("txt\PI_DESC.txt") as file_object:
    contents = file_object.read()
    print(contents)

給open參數傳遞的參數得給相對路徑console

Linux與OS X中,路徑使用斜槓(/)

Windows中,使用反斜槓(\),可是因爲python中,反斜槓被視爲轉義字符,在Windows最好在路徑開頭的單(雙)引號前加上r

相對路徑:即相對於程序文件的路徑

絕對路徑:即文本在硬盤上存儲的路徑

使用絕對路徑的程序怎麼寫呢 ?

with open(r"D:\python\txt\PI_DESC.txt") as file_object:
    contents = file_object.read()
    print(contents)

1.3逐行讀取

讀取文件時,可能須要讀取文件中的每一行,要以每一行的方式來檢查文件或者修改文件,那麼能夠對文件對象使用for循環

file_path = 'txt\PI_DESC.txt'
with open(file_path) as file_object:
    for line in file_object:
        print(line)

程序運行結果以下:

image

經過運行結果咱們能夠看出,打印結果中間有不少空白行,這些空白行是怎麼來的呢?由於在這個文件中,每行的末尾都有一個看不見的換行符,而print語句也會加一個換行符,所以每行末尾就有2個換行符:一個來自文件,另一個來自print,消除這些換行符,只須要使用方法rstrip()

file_path = 'txt\PI_DESC.txt'
with open(file_path) as file_object:
    for line in file_object:
        print(line.rstrip())

打印結果

image

1.4建立一個包含文件各行內容的列表

使用關鍵字with時,open()返回的文件對象只能在with代碼塊可用,若是要在with代碼塊外訪問文件的內容,可在with塊中將文件各行存儲在一個列表,並在with代碼塊外使用該列表

file_path = 'txt\PI_DESC.txt'
with open(file_path) as file_object:
    lines = file_object.readlines()
for line in lines:
    print(line.rstrip())

1.5使用文件的內容

在上面一節中咱們提到把數據提取到內存中,那麼咱們就能夠對數據進行爲所欲爲的操做了

須要:將圓周率連在一塊兒打印出來(刪除空格),並打印其長度

file_path = 'txt\PI_DESC.txt'
with open(file_path) as file_object:
    lines = file_object.readlines()

pi_str = ''
for line in lines:
    pi_str += line.strip()
print(pi_str.rstrip())
print(len(pi_str.rstrip()))

注意最後print語句並無縮進,若是是縮進的話就會每取一行打印一次

打印效果以下

image

1.5大文件的讀取

在這裏我先用圓周率前10000位作實驗,也算不上大文件,只是相對來講是大文件

附件下載地址:點擊下載

爲了避免顯示圓周率一萬位,形成console不停的閃爍,咱們只顯示前20位

file_path = 'txt\PI_DESC.txt'
with open(file_path) as file_object:
    lines = file_object.readlines()

pi_str = ''
for line in lines:
    pi_str += line.strip()
print(pi_str[:20].lstrip())
相關文章
相關標籤/搜索