日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python读文件和写文件-python开发--从文件中读取数据和写入文件

發布時間:2025/3/19 python 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python读文件和写文件-python开发--从文件中读取数据和写入文件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

#! /usr/bin/env python

-*- coding:utf-8 -*-

"""

@Author:gcan

@Email:1528667112@qq.com

@Site:http://www.gcan.top

@File:file.py

@Software:PyCharm

@Date:2018-05-13 23:51:08

@Version:1.0.0

"""

從文件中讀取數據

文本文件可存儲的數據量多得難以置信:天氣數據、交通數據、社會經濟數據、文學作品等。每當需要分析或修改存儲在文件中的信息時,讀取文件都很有用,對數據分析應用

程序來說尤其如此。例如,你可以編寫一個這樣的程序:讀取一個文本文件的內容,重新設置這些數據的格式并將其寫入文件,讓瀏覽器能夠顯示這些內容。 要使用文本文件中的信息,首先需要將信息讀取到內存中。

為此,你可以一次性讀取文件的全部內容,也可以以每次一行的方式逐步讀取。

讀取整個文件 要讀取文件,需要一個包含幾行文本的文件。

下面首先來創建一個文件,它包含精確到小數點后30位的圓周率值,且在小數點后每10位處都換行:

with open("pi_digits.txt") as file_object:

contents = file_object.read()

print(contents)

在這個程序中,第1行代碼做了大量的工作。我們先來看看函數open() 。要以任何方式使用文件——哪怕僅僅是打印其內容,都得先打開 文件,這樣才能訪問它。函數open() 接受一個參數:要打開的文件的名稱。Python在當前執行的文件所在的目錄中查找指定的文件。在這個示例中,當前運行的是file_reader.py,因此Python在file_reader.py所在的目錄中 查找pi_digits.txt。函數open() 返回一個表示文件的對象。在這里,open("pi_digits.txt") 返回一個表示文件pi_digits.txt 的對象;Python將這個對象存儲在我們將 在后面使用的變量中。

關鍵字with 在不再需要訪問文件后將其關閉。在這個程序中,注意到我們調用了open() ,但沒有調用close() ;你也可以調用open() 和close() 來打開和關閉文件,但 這樣做時,如果程序存在bug,導致close() 語句未執行,文件將不會關閉。這看似微不足道,但未妥善地關閉文件可能會導致數據丟失或受損。如果在程序中過早地調 用close() ,你會發現需要使用文件時它已關閉 (無法訪問),這會導致更多的錯誤。并非在任何情況下都能輕松確定關閉文件的恰當時機,但通過使用前面所示的結構,可 讓Python去確定:你只管打開文件,并在需要時使用它,Python自會在合適的時候自動將其關閉。

有了表示pi_digits.txt的文件對象后,我們使用方法read() (前述程序的第2行)讀取這個文件的全部內容,并將其作為一個長長的字符串存儲在變量contents 中。這樣,通過 打印contents 的值,就可將這個文本文件的全部內容顯示出來:

相比于原始文件,該輸出唯一不同的地方是末尾多了一個空行。為何會多出這個空行呢?因為read() 到達文件末尾時返回一個空字符串,而將這個空字符串顯示出來時就是一 個空行。要刪除多出來的空行,可在print 語句中使用rstrip() :

逐行讀取

讀取文件時,常常需要檢查其中的每一行:你可能要在文件中查找特定的信息,或者要以某種方式修改文件中的文本。例如,你可能要遍歷一個包含天氣數據的文件,并使用天 氣描述中包含字樣sunny的行。在新聞報道中,你可能會查找包含標簽 的行,并按特定的格式設置它。

要以每次一行的方式檢查文件,可對文件對象使用for 循環:

filename = "pi_digits.txt"

with open(filename) as file_object:

for line in file_object:

print(line.rstrip())

我們將要讀取的文件的名稱存儲在變量filename 中,這是使用文件時一種常見的做法。

由于變量filename 表示的并非實際文件——它只是一個讓Python知道到哪里 去查找文件的字符串,

因此可輕松地將"pi_digits.txt" 替換為你要使用的另一個文件的名稱。調用open() 后,將一個表示文件及其內容的對象存儲到了變量file_object中。

這里也使用了關鍵字with ,讓Python負責妥善地打開和關閉文件。

為查看文件的內容,我們通過對文件對象執行循環來遍歷文件中的每一行

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

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

在with 代碼塊外使用該列表:你可以立即處理文件的各個部分,也可推遲到程序后面再處理。 下面的示例在with 代碼塊中將文件pi_digits.txt的各行存儲在一個列表中,再在with 代碼塊外打印它們:

filename = "pi_digits.txt"

with open(filename) as file_object:

lines = file_object.readlines()

print(lines)

for line in lines:

print(line.rstrip())

方法readlines() 從文件中讀取每一行,并將其存儲在一個列表中;接下來,該列表被存儲到變量lines 中;在with 代碼塊外,我們依然可以使用這個變量。

我們使用一個簡單的for 循環來打印lines 中的各行。由于列表lines 的每個元素都對應于文件中的一行,因此輸出與文件內容完全一致。

使用文件的內容

將文件讀取到內存中后,就可以以任何方式使用這些數據了。下面以簡單的方式使用圓周率的值。首先,我們將創建一個字符串,它包含文件中存儲的所有數字,且沒有任何空格:

filename = "pi_digits.txt"

with open(filename) as file_object:

lines = file_object.readlines()

pi_string = ""

for line in lines:

pi_string += line.rstrip()

print(pi_string)

print(len(pi_string))

就像前一個示例一樣,我們首先打開文件,并將其中的所有行都存儲在一個列表中。我們創建了一個變量——pi_string ,用于存儲圓周率的值。

接下來,我們使用 一個循環將各行都加入pi_string ,并刪除每行末尾的換行符。我們打印這個字符串及其長度:

在變量pi_string 存儲的字符串中,包含原來位于每行左邊的空格,為刪除這些空格,可使用strip() 而不是rstrip() :

filename = "pi_digits.txt"

with open(filename) as file_object:

lines = file_object.readlines()

pi_string = ""

for line in lines:

pi_string += line.strip()

print(pi_string)

print(len(pi_string))

這樣,我們就獲得了一個這樣的字符串:它包含精確到30位小數的圓周率值。這個字符串長32字符,因為它還包含整數部分的3和小數點:

3.141592653589793238462643383279

32

讀取文本文件時,Python將其中的所有文本都解讀為字符串。如果你讀取的是數字,并要將其作為數值使用,就必須使用函數int() 將其轉換為整數,或使用 函數float() 將其轉換為浮點數。

包含一百萬位的大型文件

前面我們分析的都是一個只有三行的文本文件,但這些代碼示例也可處理大得多的文件。

如果我們有一個文本文件,其中包含精確到小數點后1 000 000位而不是30位的圓周率值,也可創建一個包含所有這些數字的字符串。

為此,我們無需對前面的程序做任何修改,只需將這個文件傳遞給它即可。在這里,我們只打印到小數點后50位,以免終端為顯 示全部1 000 000位而不斷地翻滾:

filename = "pi_million_digits.txt"

with open(filename) as file_object:

lines = file_object.readlines()

pi_string = ""

for line in lines:

pi_string += line.strip()

print(pi_string[:52] + "...")

print(pi_string[:] + "...")

print(len(pi_string))

輸出表明,我們創建的字符串確實包含精確到小數點后1 000 000位的圓周率值:

3.14159265358979323846264338327950288419716939937510...

1000002

對于你可處理的數據量,Python沒有任何限制;只要系統的內存足夠多,你想處理多少數據都可以。

圓周率值中包含你的生日嗎

我一直想知道自己的生日是否包含在圓周率值中。下面來擴展剛才編寫的程序,以確定某個人的生日是否包含在圓周率值的前1 000 000位中。為此,可將生日表示為一個由數字

組成的字符串,再檢查這個字符串是否包含在pi_string 中:

filename = "pi_million_digits.txt"

with open(filename) as file_object:

lines = file_object.readlines()

pi_string = ""

for line in lines:

pi_string += line.rstrip()

birthday = input("Enter your birthday, in the form mmddyy: ")

if birthday in pi_string:

print("Your birthday appears in the first million digits of pi!")

else:

print("Your birthday does not appear in the first million digits of pi.")

寫入文件

保存數據的最簡單的方式之一是將其寫入到文件中。通過將輸出寫入文件,即便關閉包含程序輸出的終端窗口,這些輸出也依然存在:你可以在程序結束運行后查看這些輸出, 可與別人分享輸出文件,還可編寫程序來將這些輸出讀取到內存中并進行處理。

寫入空文件

要將文本寫入文件,你在調用open() 時需要提供另一個實參,告訴Python你要寫入打開的文件。為明白其中的工作原理,我們來將一條簡單的消息存儲到文件中,而不是將其打印到屏幕上:

filename = "programming.txt"

with open(filename, "w") as file_object:

file_object.write("I love programming.")

調用open() 時提供了兩個實參。第一個實參也是要打開的文件的名稱;第二個實參("w" )告訴Python,我們要以寫入模式 打開這個文件。打開文件時,

可指定讀取模式 ("r" )、寫入模式 ("w" )、附加模式 ("a" )或讓你能夠讀取和寫入文件的模式("r+" )。如果你省略了模式實參,Python將以默認的只讀模式打開文件。

如果你要寫入的文件不存在,函數open() 將自動創建它。然而,以寫入("w" )模式打開文件時千萬要小心,因為如果指定的文件已經存在,Python將在返回文件對象前清空該文件。

我們使用文件對象的方法write() 將一個字符串寫入文件。這個程序沒有終端輸出,但如果你打開文件programming.txt,將看到其中包含如下一行內容:

I love programming.

比于你的計算機中的其他文件,這個文件沒有什么不同。你可以打開它、在其中輸入新文本、復制其內容、將內容粘貼到其中等。 注意 Python只能將字符串寫入文本文件。要將數值數據存儲到文本文件中,必須先使用函數str() 將其轉換為字符串格式。

寫入多行

函數write() 不會在你寫入的文本末尾添加換行符,因此如果你寫入多行時沒有指定換行符,文件看起來可能不是你希望的那樣:

filename = "programming.txt"

with open(filename, "w") as file_object:

file_object.write("I love programming.")

file_object.write("I love creating new games.")

要讓每個字符串都單獨占一行,需要在write()

語句中包含換行符:

file_object.write("I love programming. ")

file_object.write("I love creating new games. ")

附加到文件

如果你要給文件添加內容,而不是覆蓋原有的內容,可以附加模式 打開文件。你以附加模式打開文件時,Python不會在返回文件對象前清空文件,而你寫入到文件的行都將添加 到文件末尾。如果指定的文件不存在,Python將為你創建一個空文件。

下面來修改write_message.py,在既有文件programming.txt中再添加一些你酷愛編程的原因:

filename = "programming.txt"

with open(filename, "a") as file_object:

file_object.write("I also love finding meaning in large datasets. ")

file_object.write("I love creating apps that can run in a browser. ")

我們打開文件時指定了實參"a" ,以便將內容附加到文件末尾,而不是覆蓋文件原來的內容。我們又寫入了兩行,它們被添加到文件programming.txt末尾:

I love programming.

I love creating new games.

I also love finding meaning in large datasets.

I love creating apps that can run in a browser.

最終的結果是,文件原來的內容還在,它們后面是我們剛添加的內容。

總結

以上是生活随笔為你收集整理的python读文件和写文件-python开发--从文件中读取数据和写入文件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。