python讀寫打開文件
1. python文件操作,看這篇就足夠!
文件的存儲方式
在計算機中,文件是以二進制的方式保存在磁碟上的文本文件和二進制文件
文本文件可以使用文本編輯軟體查看本質上還是二進制文件
二進制文件保存的內容不是給人直接閱讀的,而是提供給其她軟體使用的二進制文件不能使用文件編輯軟體查看
文件基本操作
在計算機中要操作文件一共包含三個步驟:1.打開文件2.讀、寫文件
讀 將文件內容讀入內容寫 將內存內容寫入文件
模式描述
t文本模式 (默認)。
x寫模式,新建一個文件,如果該文件已存在則會報錯。
b二進制模式。
+打開一個文件進行更新(可讀可寫)。
U通用換行模式(不推薦)。
r以只讀方式打開文件。文件的指針將會放在文件的開頭。這是默認模式。
rb以二進制格式打開一個文件用於只讀。文件指針將會放在文件的開頭。這是默認模式。一般用於非文本文件如圖片等。
r+打開一個文件用於讀寫。文件指針將會放在文件的開頭。
rb+以二進制格式打開一個文件用於讀寫。文件指針將會放在文件的開頭。一般用於非文本文件如圖片等。
w打開一個文件只用於寫入。如果該文件已存在則打開文件,並從開頭開始編輯,即原有內容會被刪除。如果該文件不存在,創建新文件。
wb以二進制格式打開一個文件只用於寫入。如果該文件已存在則打開文件,並從開頭開始編輯,即原有內容會被刪除。如果該文件不存在,創建新文件。一般用於非文本文件如圖片等。
w+打開一個文件用於讀寫。如果該文件已存在則打開文件,並從開頭開始編輯,即原有內容會被刪除。如果該文件不存在,創建新文件。
wb+以二進制格式打開一個文件用於讀寫。如果該文件已存在則打開文件,並從開頭開始編輯,即原有內容會被刪除。如果該文件不存在,創建新文件。一般用於非文本文件如圖片等。
a打開一個文件用於追加。如果該文件已存在,文件指針將會放在文件的結尾。也就是說,新的內容將會被寫入到已有內容之後。如果該文件不存在,創建新文件進行寫入。
ab以二進制格式打開一個文件用於追加。如果該文件已存在,文件指針將會放在文件的結尾。也就是說,新的內容將會被寫入到已有內容之後。如果該文件不存在,創建新文件進行寫入。
a+打開一個文件用於讀寫。如果該文件已存在,文件指針將會放在文件的結尾。文件打開時會是追加模式。如果該文件不存在,創建新文件用於讀寫。
ab+以二進制格式打開一個文件用於追加。如果該文件已存在,文件指針將會放在文件的結尾。如果該文件不存在,創建新文件用於讀寫。
文件打開模式有很多,但是我們實際用到的就只有六種。
我們總結一下主要用到的是下面六種
模式可做操作若文件不存在是否覆蓋文件原來內容
r只讀報錯——
r+可讀、可寫報錯是
w只寫創建是
w+可讀、可寫創建是
a只寫創建否,追加寫
a+可讀、可寫創建否,追加寫
只讀模式打開文件——只讀(r)
文件若不存在報錯:
讀寫模式打開文件——讀寫模式(r+)
數據寫入之前:
數據寫入之後:
會替換掉相同長度的內容
文件若不存在報錯:
寫模式打開文件——寫模式(w)
數據寫入之前:
數據寫入之後:
這種操作會刪除原來的文件內容,重新寫入Python,
並且把游標放在文件最開始。
若文件不存在,系統會創建該文件夾並重新寫入內容
讀寫模式打開文件——讀寫模式(w+)
數據寫入之前:
數據寫入之後:
這種操作會刪除原來的文件內容,重新寫入Python,
並且把游標放在文件最開始。
若文件不存在,系統會創建該文件夾並重新寫入內容
利用這個原理所以文件寫模式(w)、讀寫模式(w+)還可以用作刪除文件內容。
因為他們整個工作原理就是把文件原來的內容刪除,然後寫入新的內容。
如果我們寫入的內容為空,那麼不就是刪除文件內容。
數據寫入之前:
數據寫入之後:
寫模式打開文件(追加內容)——寫模式(a)
數據寫入之前:
數據寫入之後:
可以看到是在原先內容的基礎上在文末追加新的內容!
若文件不存在,系統會創建新的文件夾並寫入內容
讀寫模式打開文件(追加內容)——讀寫模式(a)
數據寫入之前:
數據寫入之後:
可以看到是在原先內容的基礎上在文末追加新的內容!
若文件不存在,系統會創建新的文件夾並寫入內容
二進制模式打開文件
我們看到了在文件打開模式中有以下模式:rb、wb……有這種帶 b 的。
什麼意思呢?
就是用二進制的方式打開文件。
很明顯,我們出現了以下錯誤:
主要原因是因為編碼的問題,可能是因為0x82這個位元組在gbk編碼中沒有這個字元,
可能原字元是兩個位元組,在gbk里被解析成了一個位元組,導致字元不存在。
這就是我們文件打開方式需要使用二進制讀取的原因。
文件操作
open 函數負責打開文件,並且返迴文件對象
read /write / close 三個方法都需要通過文件對象 來調用
文件和文件夾的操作
在Python中⽂件和⽂件夾的操作要藉助os模塊⾥⾯的相關功能,
具體步驟如下:
導⼊os模塊
使⽤ os 模塊相關功能
1、文件重命名
2、刪除文件
3、創建文件夾
4、刪除文件夾
5、獲取當前目錄
6、改變默認目錄
7、獲取目錄列表
2. python怎樣讀取txt文件的數據內容
我們使用python的時候經常需要讀取txt文件中的內容,那麼該如何讀取呢?下面我給大家分享一下。
- 01
首先我們新建一個txt文件,在裡面寫入一些內容,如下圖所示
- 02
接下來打開運行界面,輸入CMD命令,如下圖所示
- 03
然後進入CMD界面以後我們輸入python命令進入python環境,如下圖所示
- 04
最後我們通過python中的open方法打開txt文件,然後通過read方法讀取文件內容,如下圖所示
3. 用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()
4. python request/讀寫/上傳文件
python 讀寫文件:
data_json = json.mps(result_r) #json字元串
f =open('E://XXX.txt',"a+") #打開文件,追加+讀寫
f.write(data_json) # data_json 寫入XXX.txt'文件
f.seek(0) # 游標移動到文件開頭
lines = f.read() # 逐行讀入
f.close() #關閉文件
mode 打開的方式(r,w,a,x,b,t,r+,w+,a+,U)
r 以只讀方式打開文件。文件的指針會放在文件的開頭。
w 以寫入方式打開文件。文件存在覆蓋文件,文件不存在創建一個新文件。
a 以追加方式打開文件。如果文件已存在,文件指針放在文件末尾。如果文件不存在,創建新文件並可寫入。
r+ 打開一個文件用於讀寫,文件指針會放在文件的開頭
w+ 打開一個文件用於讀寫,文件存在覆蓋文件,文件不存在創建一個新文件。
a+ 打開一個文件用於讀寫,如果文件已存在,文件指針放在文件末尾。如果文件不存在,創建新文件並可寫入。
記憶方法:記住r讀,w寫,a追加,每個模式後加入+號就變成可讀寫。
f =open('E://xxx.txt',"a+") / f=open(r'E://xxx.txt',mode='a+',encoding='UTF-8')
踩坑1>
沒有加encoding='UTF-8',可能會報如下錯:
import requests # 使用 request函數需導入 request 庫
import json #使用 JSON 函數需要導入 json 庫: import json 。
param ={} #請求body
url ='http://域名/api'
header = {'content-type':'application/json'}
r = requests.post(url,json=param,headers=header) #發送post請求
result_r = r.json() #請求返回的json傳入對象result_r
data_json = json.mps(result_r) #將 Python-result_r對象轉為字元串 json.mps()
文件上傳請求(csv文件)
file_path = "xxx.csv" 文件路徑
uploaddata = {"file":open(file_path, "rb")}
file_upload_result = requests.post(api_URL, files=uploaddata, cookies=cookie)
5. 使用 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
6. Python打開zip文件
Zip文件格式是通用的文檔壓縮標准。自1.6版本起,Python中zipfile模塊能夠直接處理zip文件里的數據,例如需要將對應目錄或多個文件打包或壓縮成zip格式,或者需要查看一個zip格式的歸檔文件中部分或者所有文件同時避免講這些文件展開到磁碟上。使用ZipFile類來操作zip文件。
創建一個ZipFile對象,表示一個zip文件。
參數file:文件的路徑或者類似文件對象
參數mode:讀"r",寫入"w",添加"a"
參數compression: ZIP_STORED(無壓縮),ZIP_DEFLATED(壓縮,需要zlib支持)
參數allowZip64:默認情況下報錯,將其設為True,ZipFile將用ZIP64擴展進行創建文件。
下面示例演示了讀取一個zip文檔,將文檔里所有文件解壓到名為"work"的文件里。
import zipfile
if __name__ == "__main__":
zFile = zipfile.ZipFile("F:\\txt.zip","r")
#ZipFile.namelist():獲取ZIP文檔內所有文件的名稱列表
for fileM in zFile.namelist():
zFile.extract(fileM,"F:\\work")
zFile.close()
read(self,name,pwd=None)獲取ZIP文檔內文件的二進制數據
下面例子演示了使用read方法獲取ZIP文檔中mango.txt文件的數據,並寫到.txt文件中
import zipfile
if __name__ == "__main__":
zipFile = zipfile.ZipFile('F:\\test.zip','r')
data = zipFile.read("mango.txt")
(lambda f,d:(f.write(d),f.close()))(open("F:\\.txt,'w"),data)
zipFile.close()
write(self, filename, arcname=None, compress_type=None)將指定文件寫入ZIP文檔中
參數filename:需要寫入文件的路徑
參數arcname:文件寫入ZIP文檔後保存的文件名
參數compress_type:壓縮方法(ZIP_STORED或ZIP_DEFAULED)
下面離子演示了創建一個zip文檔,將test.docx文件寫入壓縮文檔裡面。
import zipfile
if __name__ == "__main__":
zipFile = zipfile.ZipFile("F:\\test.zip","w")
zipFile.write("F:\\test.docx","ok.docx",zipfile.ZIP_DEFLATED)
zipFile.close()
getinfo(name)返回一個ZipInfo類的對象。
import zipfile
if __name__ == "__main__":
zipInfo = zipFile.getinfo(ok.docx)
print("filename:",zipInfo.filename)
print("date_time:",zipInfo.date_time)
常用函數
關閉歸檔文件,你必須在退出程序之前調用close()否則將不會寫入關鍵記錄數據。
返回一個ZipInfo對象,其中包含有關歸檔成員name的信息。針對一個目前並不包含於歸檔中的名稱調用getinfo()將會引發KeyError。
返回一個列表,其中包含每個歸檔成員的ZipInfo對象。如果是打開一個現有歸檔則這些對象的排列順序與他們對於條目在磁碟上的實際ZIP文件中的順序一致。
返回按名稱排列的歸檔成員列表。
以二進制文件類對象的形式訪一個歸檔成員。name可以是歸檔內某個文件的名稱也可以是某個ZipInfo對象。如果包含了mode形參,則它必須為"r"(默認值)或"w"。pwd為用於解密已加密Zip文件的密碼。
open()也是一個上下文 管理器,因此支持with語句:
with ZipFile('spam.zip') as myzip:
with myzip.open('eggs.txt') as myfile:
print(myfile.read())
如果mode為「r」則文件類對象(ZipExtFile)將只讀並且提供下列方法:read(),readline(),readlines(),seek(),tell(),__iter__(),__next__()。這些對象可獨立於ZipFile進行操作。
如果mode='w'則返回一個可寫入的文件句柄,它將支持write()方法。當一個可寫入的文件句柄被打開時,嘗試讀寫ZIP文件中的其他文件將會引發ValueError。
當寫入一個文件時,如果文件大小不能預先確定但是可能超過2GiB,可傳入force_zip64=True以確保標頭格式能夠支持超大文件。如果文件大小可以預先確定,則在構造ZipInfo對象時應設置file_size,並將其作name形參。
從歸檔中提取一個成員放入當前工作目錄;member必須為成員的完整名稱或ZipInfo對象。成員的文件信息會盡可能精確地被提取。path指定一個要提取到的不同目錄。member可以是一個文件名或ZipInfo對象。pwd是用於解密文件的密碼。返回所創建的經正規化的路徑(對應於目錄或新文件)。
從歸檔中提取出所有成員放入當前工作目錄。path指定一個要提取到的不同的目錄。members為可選項且必須為namelist()所返回列表的一個子集。pwd是用於解密文件的密碼。
警告:絕不要未經預先檢驗就從不可靠的源中提取歸檔文件。 這樣有可能在 path 之外創建文件,例如某些成員具有以 "/" 開始的文件名或帶有兩個點號 ".." 的文件名。 此模塊會嘗試防止這種情況。 參見 extract() 的注釋。
將歸檔是目錄表列印到sys.stdout.
設置pwd為用於提取已加密文件的默認密碼。
返回歸檔中文件name的位元組數據。name是歸檔中文件的名稱,或是一個ZipInfo對象。歸檔必須以讀取或追加方式打開。pwd為用於已加密文件的密碼,並且如果指定該參數則它將覆蓋通過setpassword()設置的默認密碼。 on a ZipFile that uses a compression method 在使用 ZIP_STORED , ZIP_DEFLATED , ZIP_BZIP2 或 ZIP_LZMA 以外的壓縮方法的 ZipFile 上調用 read() 將引發 NotImplementedError 。 如果相應的壓縮模塊不可用也會引發錯誤。
讀取歸檔中的所有文件並檢查他們的CRC和文件頭。返回第一個已損壞文件的名稱,在其他情況下則返回None。
將名為filename的文件寫入歸檔,給予的歸檔名為arcname(默認情況下將與filename一致,但是不帶驅動器盤符並會移除開頭的路徑分隔符)。compress_type如果給出,它將覆蓋作為構造器compression形參對於新條目所給出的值。類似地,compresslevel如果給出也將覆蓋構造器。歸檔必須使用"w","x「或"a"模式打開。
將一個文件寫入歸檔。 內容為 data ,它可以是一個 str 或 bytes 的實例;如果是 str ,則會先使用 UTF-8 進行編碼。 zinfo_or_arcname 可以是它在歸檔中將被給予的名稱,或者是 ZipInfo 的實例。 如果它是一個實例,則至少必須給定文件名、日期和時間。 如果它是一個名稱,則日期和時間會被設為當前日期和時間。 歸檔必須以 'w', 'x' 或 'a' 模式打開。
ZIP文件的名稱
7. 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取負值。
8. python文件讀取與寫入
open(filepath) :打開文件
open(filepath,'r') :打開方式,默認是讀取
open(filepath).read() :讀取文件中的內容
open(filepath).readline() :讀取文件中一行的內容
open(filepath).readline()[1] :讀取文件中的內容,返回值是列表。
open(filepath).close() :關閉文件
open(filepath).seek(0) :將游標回到首位
with open()函數,不用close()方法,默認自動關閉,所以需要制定一些規則.
文件內建函數和方法:
open() : 打開文件
read() :輸入
readline() :輸入一行
seek() :文件內移動
write() :輸出
close() :關閉文件