⑴ 使用 python 讀寫文件
有些數據是臨時的,它們在應用程序運行時存儲在內存中,然後丟棄。但是有些數據是持久的。它們存儲在硬碟驅動器上供以後使用,而且它們通常是用戶最關心的東西。對於程序員來說,編寫代碼讀寫文件是很常見的,但每種語言處理該任務的方式都不同。本文演示了如何使用 Python 處理文件數據。
在 Linux 上,你可能已經安裝了 Python。如果沒有,你可以通過發行版軟體倉庫安裝它。例如,在 CentOS 或 RHEL 上:
在 macOS 上,你可以使用 MacPorts或Homebrew安裝。在 Windows 上,你可以使用Chocolatey安裝。
一旦安裝了 Python,打開你最喜歡的文本編輯器,准備好寫代碼吧。
如果你需要向一個文件中寫入數據,記住有三個步驟:
這與你在計算機上編碼、編輯照片或執行其他操作時使用的步驟完全相同。首先,打開要編輯的文檔,然後進行編輯,最後關閉文檔。
在 Python 中,過程是這樣的:
這個例子中,第一行以 寫 模式打開了一個文件,然後用變數 f 表示,我使用了 f 是因為它在 Python 代碼中很常見,使用其他任意有效變數名也能正常工作。
在打開文件時,有不同的模式:
第二行表示向文件中寫入數據,本例寫入的是純文本,但你可以寫入任意類型的數據。
最後一行關閉了文件。
對於快速的文件交互,常用有一種簡短的方法可以寫入數據。它不會使文件保持打開狀態,所以你不必記得調用 close 函數。相反,它使用 with 語法:
如果你或你的用戶需要通過應用程序需要向文件中寫入一些數據,然後你需要使用它們,那麼你就需要讀取文件了。與寫入類似,邏輯一樣:
同樣的,這個邏輯反映了你一開始使用計算機就已知的內容。閱讀文檔,你可以打開、閱讀,然後關閉。在計算機術語中,「打開」文件意味著將其載入到內存中。
實際上,一個文本文件內容肯定不止一行。例如,你需要讀取一個配置文件、 游戲 存檔或樂隊下一首歌曲的歌詞,正如你打開一本實體書時,你不可能立刻讀完整本書,代碼也只能解析已經載入到內存中的文件。因此,你可能需要遍歷文件的內容。
示例的第一行指明使用 讀 模式打開一個文件,然後文件交由變數 f 表示,但就像你寫數據一樣,變數名是任意的。 f 並沒有什麼特殊的,它只是單詞 「file」 的最簡表示,所以 Python 程序員會經常使用它。
在第二行,我們使用了 line ,另一個任意變數名,用來表示 f 的每一行。這告訴 Python 逐行迭代文件的內容,並將每一行的內容列印到輸出中(在本例中為終端或IDLE)。
就像寫入一樣,使用 with 語法是一種更簡短的方法讀取數據。即不需要調用 close 方法,方便地快速交互。
使用 Python 有很多方法向文件寫入數據,包括用 JSON、YAML、TOML等不同的格式寫入。還有一個非常好的內置方法用於創建和維護SQLite資料庫,以及許多庫來處理不同的文件格式,包括圖像、音頻和視頻等。
via: https://opensource.com/article/21/7/read-write-files-python
作者:Seth Kenlon選題:lujun9972譯者:MjSeven校對:turbokernel
⑵ python對文件的讀操作方法有哪些
摘要 1 文件讀取全文本操作
⑶ Python 拿來直接用的7個os讀寫文件的操作!網友:建議收藏!
在學習真實案例之前,我們先來了解一下Python文件操作的一些基本概念~~
如何創建讀取和寫出的文件對象,open()方法來搞定
他有兩個參數,第一個就是讀取的文件名稱,第二個是可選的,指的是打開文件的模式,默認是讀取文件。
當我們獲取到讀取文件對象fin之後我們就可以讀取文件內容了,這里介紹兩種方式。
第一種是直接讀取文件內容,
第二種是按行讀取文件內容。
區別在於如果你的文件非常大,如果直接讀取效率會非常低下,甚至會撐爆內存。
所以按行讀取按行處理就不會因為文件過大而產生問題了
文件讀取完成之後寫出文件有如下方式:
'\n'的意思是我們手動換行
最後關閉文件有兩種方式
為什麼要關閉文件呢?
如果不關閉他就會持續打開狀態,瑣事其他進程後者線程要操作它的時候就會報錯
我們有時候寫入非常大的數據的時候打開文件後會發現數據不是最新的?
這是因為python在寫出文件是先寫到內存中,等到一定的事件之後或者文件到達一定的數量之後才會寫入到磁碟
所以我們如果想要看最新的數據,可直接調用如下方法
接下來我們使用數據進行測試
1. 文件讀操作
文件讀、寫操作比較常見。讀取文件,要先判斷文件是否存在。
若文件存在,再讀取;不存在,拋出文件不存在異常。
文件存在情況:
文件不存在情況:
open 後,務必要 close,這種寫法有些繁瑣,還容易出錯。藉助 with 語法,同時實現 open 和 close 功能,這是更常用的方法。
2.獲取文件的後綴名
如何優雅地獲取文件後綴名?os.path 模塊,splitext 能夠優雅地提取文件後綴。
3. 批量修改文件後綴名
修改之前
修改文件後綴名的文件方法如下:
從修改之後:
4. 獲取文件名
有時拿到一個文件名時,名字帶有路徑。這時,使用 os.path、split 方法實現路徑和文件的分離。
我們還可以直接使用使用os.path 模塊,splitext 提取文件後綴名。
5.獲取以指定後綴結尾的文件
當我們想要查詢某路徑下所有以固定後綴結尾的文件時,可以使用如下方法
6. 批量修改文件後綴名
後綴名批量修改,實現思路:
1. 遍歷目錄下的所有文件
2. 獲取文件的後綴名
3. 如果後綴名命中為 old_ext,rename 重命名
defbatch_rename(work_dir, old_ext, new_ext):
"""
傳遞當前目錄,原來後綴名,新的後綴名後,批量重命名後綴
7. 批量獲取文件修改時間
os.walk 生成文件樹結構,os.path.getmtime 返迴文件的最後一次修改時間:
⑷ python讀寫文件
讀文件
1)使用open()方法打開文件,返回一個文件對象
原型:open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True)
舉例:f = open('test.txt', 'r')
test.txt表示文件路徑(包含文件名,這個file參數可以是絕對或者相對路徑)
r表示是讀文本文件,rb是讀二進制文本文件。(這個mode參數默認值就是r)
2)使用close()方法關閉文件
f.close()
打開後的文件必須關閉,因為文件對象會佔用系統資源,系統打開文件數量也就有限了
3)打開文件時的異常處理
f=open('test.txt', 'r')
f.read()
f.close()
FileNotFoundError: [Errno 2] No such file or directory: 'test.txt'
文件讀寫時都有可能產生異常IOError(比如文件不存在),這樣其後面的f.read(),f.close()就不會調用。為保證無論是否異常都可以關閉文件,一般使用try ... finally來處理:
try:
f = open('test.txt', 'r')
f.read()
finally:
if f:
f.close()
但這種寫法過於繁瑣,所以Python引入了with語句來自動調用close()方法:
with open('test.txt', 'r') as f:
f.read()
4)讀文件 - read()、readline() 和 readlines()
read() 一次讀取整個文件,它通常用於將文件內容放到一個字元串變數中。如果文件過大,內存不夠,可以通過反復調用read(size)方法,每次最多讀取size個位元組的內容。
readline() 一次讀取文件中一行內容,可反復調用
readlines() 一次讀取所有內容並按行返回列表,該列表可以由for ... in ... 結構再進一步處理。
特別注意:
這三種方法是把每行末尾的'\n'也讀進來了,如有需要就得我們手動去掉'\n'
with open('test.txt', 'r') as f:
list = f.readlines()
for i in range(0, len(list)):
list[i] = list[i].rstrip('\n')
寫文件
1)寫文件和讀文件是一樣的,唯一區別是open文件時,傳入標識符不同,即'w'或者'wb'表示寫文本文件或寫二進制文件
f = open('test.txt', 'w')
f = open('test.txt', 'wb')
f = open('test.txt', 'a')
f.close()
特別注意:
1. 如果沒有這個文件,會自動創建一個新文件;如果有,就會先把原文件的內容清空再寫入;若不想清空原來的內容而是直接在後面追加新的內容,就用'a'這個模式
2. 寫文件,操作系統往往不會立刻把數據寫入磁碟,而是放到內存緩存起來,空閑的時候再慢慢寫入。只有調用close()方法時,操作系統才保證把沒有寫入的數據全部寫入磁碟。忘記調用close()的後果是數據可能只寫了一部分到磁碟,剩下的丟失了。
2)寫文件 - write()、writelines()
write()方法和read()、readline()方法對應,是將字元串寫入到文件中。
writelines()方法和readlines()方法對應,也是針對 列表 的操作。它接收一個 字元串列表 作為參數,將他們寫入到文件中。
特別注意:
換行符不會自動的加入,需要顯式的加入換行符。
f = open('test.txt', 'w')
f.writelines(["111\n", "222\n", "333\n"])
補充說明:
1)對於非默認編碼(utf-8)的文件,需要open時添加encording參數,選擇對應的編碼方式
2)r+, w+, a+,可讀可寫
3)seek()方法,移動文件指針
seek(offset[, whence]) ,offset是相對於某個位置的偏移量。位置由whence決定,默認whence=0,從開頭起;whence=1,從當前位置算起;whence=2相對於文件末尾移動,通常offset取負值。
⑸ python讀取文件—txt文件常用讀寫操作
f = open("data.txt","r") #設置文件對象
f.close() #關閉文件
為了方便,避免忘記close掉這個文件對象,可以用下面這種方式替代
with open('data.txt',"r") as f: #設置文件對象
str = f.read() #可以是隨便對文件的操作
f = open("data.txt","r") #設置文件對象
str = f.read() #將txt文件的所有內容讀入到字元串str中
f.close() #將文件關閉
f = open("data.txt","r") #設置文件對象
line = f.readline()
line = line[:-1]
while line: #直到讀取完文件
line = f.readline() #讀取一行文件,包括換行符
line = line[:-1] #去掉換行符,也可以不去
f.close() #關閉文件
data = []
for line in open("data.txt","r"): #設置文件對象並讀取每一行文件
data.append(line) #將每一行文件加入到list中
f = open("data.txt","r") #設置文件對象
data = f.readlines() #直接將文件中按行讀到list里,效果與方法2一樣
f.close() #關閉文件
可以使用pandas的.read_csv,讀取文件的時候可以給每一列起名字,通過列名來調取相應列的數據。
import pandas as pd
data = pd.read_csv(" OSDO1012.txt",sep=',',header=None, names=['lat','lon','time','z']
使用data.lat就可以讀取名為lat這一列的數據
data = np.loadtxt("data.txt",skiprows = 1) #將文件中數據載入到data數組里,並且跳過第一行
with open('data.txt','w') as f: #設置文件對象
f.write(str) #將字元串寫入文件中
data = ['a','b','c']
單層列表寫入文件
with open("data.txt","w") as f:
f.writelines(data)
每一項用空格隔開,一個列表是一行寫入文件
data =[ ['a','b','c'],['a','b','c'],['a','b','c']]
with open("data.txt","w") as f: #設置文件對象
for i in data: #對於雙層列表中的數據
i = str(i).strip('[').strip(']').replace(',','').replace('\'','')+'\n' #將其中每一個列表規范化成字元串
f.write(i) #寫入文件
直接將每一項都寫入文件
data =[ ['a','b','c'],['a','b','c'],['a','b','c']]
with open("data.txt","w") as f: #設置文件對象
for i in data: #對於雙層列表中的數據
f.writelines(i) #寫入文件
np.savetxt("data.txt",data) #將數組中數據寫入到data.txt文件
np.save("data.txt",data) #將數組中數據寫入到data.txt文件
⑹ 用python讀取文本文件,對讀出的每一行進行操作,這個怎麼寫
用python讀取文本文件,對讀出的每一行進行操作,寫法如下:
f=open("test.txt","r")
whileTrue:
line=f.readline()
ifline:
pass#dosomethinghere
line=line.strip()
p=line.rfind('.')
filename=line[0:p]
print"create%s"%line
else:
break
f.close()