python讀寫操作
Ⅰ python文件的創建、寫入、讀取
最近在構思如何 本地化股票數據 ,覺得有必要復習一下python對文件的創建、寫入、和讀取。
首先先了解一下對於文件的處理都有常用函數:
open(path, mode):生成文件對象。
參數說明:path文件路徑、mode文件的操作模式
文件的操作模式說明
1、寫入模式:『w』創建、『wb』創建二進制、『a』追加內容、『ab』二進制形式追加內容(另外如在後面添加『+』號,附加讀取功能如:『w+』)
可用write()、writelines()寫入內容、close()保存文件
注意:windows系統在輸入寫入中文時,輸入參數 encoding=『utf-8』
可用read()函數對文件內容進行讀取
注意:讀取的內容是從結尾開始的,用seek(0)函數指定讀取位置為開頭
這里我用『w+』模式來舉例
2、讀取模式:『r』讀取內容、『rb』讀取二進制內容(區別於寫入模式的讀取,讀取模式從開頭開始讀取)
除了read()、還有readline()調用一次返回一行數據、readlines()返回每行數據list
另外還有mode屬性:看查文件對象的模式、closed屬性:判斷文件是否關閉、name屬性:返迴文件名
這里我還要介紹一個關鍵字with,他是一個表達式能為調用的文件對象別名,且自動關閉文件。
Ⅱ Python文件讀寫
常見的讀寫操作:
Python內置了讀寫文件的函數,用法和C是兼容的。本節介紹內容大致有:文件的打開/關閉、文件對象、文件的讀寫等。僅示例介紹 TXT 類型文檔的讀寫,也就是最基礎的文件讀寫,也需要注意編碼問題;
open() close() with open(...) as ...
看以下示例就能了解 Python 的 open() 及 close() 函數。這邊調用 read()方法可以一次讀取文件的全部內容,Python把內容讀到內存,用一個str對象表示,具體使用參見下文。
在 E 盤 python_file 文件夾下新建一 a.txt,輸入隨意,如下:
Python 操作 打開及關閉方式 如下:
注意 open() 之後 一定要 close()。但由於文件讀寫時都可能產生IOError,為了保證無論是否出錯都能正確地關閉文件,我們用 try ... finally 來實現:
python 簡化了改寫法,即用 with open(...) as ... ; 建議之後文件讀寫都用該寫法:
上面,你肯定注意到了參數 "r";該參數決定了打開文件的模式:只讀,寫入,追加等。所有可取值見如下的完全列表。這個參數是非強制的,默認文件訪問模式為只讀(r)。
相關參數:
File 對象
file 為一對象,它有一些內置屬性,如下
file對象的屬性:
read() read(size) readline() readlines()
之前的例子已經接觸到了 read() 函數,該函數會會一次性讀取文件的全部內容,如果能確保文件的大小,自然可以。但若文件過大,內存就爆了,所以,可以反復調用read(size)方法,每次最多讀取size個位元組的內容;也可調用 readline() 每次讀取一行內容;而調用readlines()可以一次讀取所有內容並按行返回list。總之,根據需求來。僅以 txt 文件為例,其他的文件讀取需要特殊處理;另外,文件的格式編碼方式也需要注意;這邊僅介紹讀取方法,其他的會出專題來學習。
在D:\python_file 下新建 poet.txt;示例如下,由於一個中文會佔多個位元組,故read(size) 部分會亂碼,如:
write()
寫文件和讀文件是一樣的,唯一區別是調用open()函數時,傳入標識符'w'或者'wb'表示寫文本文件或寫二進制文件;'a' 對應的表示追加等。
如下示例,由於 write.txt 文件不存在,創建該文件並寫入:
在上例基礎上,繼續,該文件被重寫:
繼續,這次使用追加,會在文件結尾追加:
https://blog.csdn.net/msspark/article/details/86745391
https://www.cnblogs.com/tianyiliang/p/8192703.html
https://www.cnblogs.com/camilla/p/7234657.html
https://blog.csdn.net/songlh1234/article/details/83316468
https://www.php.cn/python-tutorials-412484.html
https://blog.csdn.net/weay/article/details/80946152
https://blog.csdn.net/xc_zhou/article/details/81044836
Ⅲ python對文本文件的讀有哪些方法,寫有哪些方法
1 文件讀取全文本操作
在一定場景下我們需要把文本全部內容讀取出來,進行處理。python提供三種函數讀取文件,分別是read readline readlines,
read():讀取文件的全部內容,加上參數可以指定讀取的字元。
readline():讀取文件的一行。
readlines():讀取文件的所有行到內存中。
不同場景下我們可以選擇不同函數對文件進行讀取。
1.1 方法一
file_name = input("請輸入你要打開的文件的完整路徑及名稱")
file= open(file_name, "r")
txt=file.read()
# 全文本的處理
file.close()
使用read函數將文件中的內容全部讀取,放在字元串變數txt中。這樣操作適合於文本較小,處理簡單的情況,當文件較大時,這種方式處理時不合適的。一次性讀取較大的文件到內存中,會耗費較多的時間和資源。這時候分批處理效果更好。
1.2 方法二
file_name = input("請輸入你要打開的文件的完整路徑及名稱")
file= open(file_name, "r")
txt= file.read(4)
# 文本的處理while txt != ""txt= file.read(4)
# 批量文本處理
file.close()
這種方法適合於分批處理文本信息,每次批量讀入,批量處理,不會對內存造成較大的壓力。
1.3 方法三
file_name = input("請輸入你要打開的文件的完整路徑及名稱")
file= open(file_name, "r")for line infile.readlines():
# 處理每一行數據
file.close()
這種處理方式適合處理以行為分割特點的文本,並且文本較小,因為這種處理方式需要一次性把文件所有內容讀取到內存中。
1.4 方法四
file_name = input("請輸入你要打開的文件的完整路徑及名稱")
file= open(file_name, "r") # 這里的file時文件句柄for line infile:
# 處理每一行數據
file.close()
這種方式和方法三中的區別是分行讀入,逐行處理,不會一次性把文件所有內容都讀入到內存中,對一些大文件的處理是很有效的。
2 文件寫入文本操作
文件寫入有兩種寫入函數和一種輔助支持。
write():向文件中寫入一個字元或者位元組流
writelines():將一個元素全為字元串的列表寫入到文件中 需要注意的是,writelines寫入列表元素的時候會把列表元素的內容拼接到一起寫入,不會有換行和空格 。
seek(): 輔助寫入函數offset偏移量參數代表含義如下
0 - 文件開頭
1 - 當前位置
2 - 文件結尾
2.1 方法一
file_name = input("output.txt", "w+")
text= "hello world!"file_name.write(text)
file.close()
2.2 方法二
file_name = input("output.txt", "w+")
list= ["中午","早上","晚上"]
file_name.writelines(list)for line infile:
# 讀取寫入的數據,這時候發現是沒有任何內容的
file.close()
我們增加一行代碼就可以讀取到寫入的文件內容,利用seek()函數調整寫操作指針的位置,可以實現寫操作之後的正常讀取。
file_name = input("output.txt", "w+")
list= ["中午","早上","晚上"]
file_name.readlines(list)
file_name.seek(0) # 調整寫的指針到文件的開始位置for line infile:
# 讀取寫入的數據,這時候會讀出一行寫入的數據。
file.close()
Ⅳ 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讀寫文件
讀文件
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 拿來直接用的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 返迴文件的最後一次修改時間: