Python文件

来源:https://www.cnblogs.com/myblog-wll/archive/2018/12/19/10145418.html
-Advertisement-
Play Games

1.文件讀模式 r f = open("helloworld", 'r', encoding="utf-8") 文件句柄: "helloworld" 表示讀的文件的文件名, 'r' 代表讀模式, encoding="utf-8" 表示字元編碼形式為utf-8。 有open就有close,不管是讀文件 ...


1.文件讀模式 r

f = open("helloworld", 'r', encoding="utf-8")

文件句柄:

"helloworld" 表示讀的文件的文件名,

'r' 代表讀模式,

encoding="utf-8" 表示字元編碼形式為utf-8。

有open就有close,不管是讀文件還是寫文件,最後一定要關閉文件,f.close()

f = open("helloworld", 'r', encoding="utf-8")
s1 = f.read()
print(s1)
f.close()

#輸出
Hello World!
f = open("helloworld", 'r', encoding="utf-8")
s1 = f.read()
s2 = f.read()  # 文件讀完一遍就沒了
print(s1)
print(s2)  # 所以s1後面就沒了,什麼都沒有
f.close()

#輸出
Hello World!

2.文件寫模式 w

f = open("helloworld", 'w', encoding="utf-8")

文件句柄:

"helloworld" 表示寫的文件的文件名,這裡的helloworld上面已經讀過了,表示已經存在,那麼這裡寫模式還是在helloworld文件里寫,那麼原來的內容則被現在寫的文件內容替換,並不會在原來的內容下麵接著寫。當然如果文件名是不存在的文件,比如說"helloworld2",那麼會自動(可以不手動創建)幫我們新建一個文件名為helloworld2的文件,並且將寫的內容添加在文件里。

'w' 代表讀模式,

encoding="utf-8" 表示字元編碼形式為utf-8。

需要註意的是這裡是寫 w 模式,只能寫f.write(),不能寫完之後再進行讀文件f.read();w就只能是寫,r就只能是讀

f = open("helloworld", 'w', encoding="utf-8")
f.write("Python\n")
f.write("hello world")
f.close()

#運行之後helloworld文件里內容為
Python
hello world

#而原本的helloworld文件里的內容是
Hello World!

3.既能讀又能寫 r+模式

f = open("helloworld2", 'r+', encoding="utf-8")

文件句柄:

"helloworld2" 表示讀寫的文件的文件名,

'r+' 代表讀寫模式,可以追加

encoding="utf-8" 表示字元編碼形式為utf-8。

helloworld2文件里原本的內容為:

Hello World
Python
wll
luyue
shenyuqian
jiangxiaoxia
wangrong
shiyuting
f = open("helloworld2", 'r+', encoding="utf-8")
print(f.readline().strip())
print(f.readline().strip())
print(f.readline().strip())
f.write("--------------------------")
print(f.readline().strip())

#輸出
Hello World
Python
wll
luyue

#helloworld2文件里的內容現在變為
Hello World
Python
wll
luyue
shenyuqian
jiangxiaoxia
wangrong
shiyuting--------------------------

補充:代碼里的f.readline()是指一行一行地讀文件,第一個f.readline()就是讀文件的第一行,所以就輸出Hello World,第二個就是讀第二行,以此類推下去,我們又寫了一行“----------------”,但結果是追加在了最後,而不是在第三行後面,是因為 r+ 模式就是寫的內容追加在最後,就這麼規定的沒辦法。.strip()是把空格和換行都去掉,好看一點而已。

4.既能讀又能寫 w+模式

f = open("helloworld2", 'w+', encoding="utf-8")

文件句柄:

"helloworld2" 表示寫讀的文件的文件名,

'w+' 代表寫讀模式,沒啥用,不能追加,這裡的helloworld2已經存在,所以寫讀之後寫的內容會覆蓋原來helloworld2文件里原來的內容。

encoding="utf-8" 表示字元編碼形式為utf-8。

f = open("helloworld2", 'w+', encoding="utf-8")  # w+是寫讀模式,沒啥用
f.write("Hello World\n")
f.write("Python\n")
f.write("wll\n")
f.write("ly\n")
print(f.tell())  #tell()字元的計數
f.seek(5)  # 游標指到第五個字元這裡,其實也不好使,沒有辦法在指定的游標這裡寫,只能寫後面
print(f.readline())  #讀一行的第五個字元後面的內容,readline只讀一行
f.write("jiang\n")  #這裡的內容只能寫在最後
f.close()

#輸出
30
 World

5.二進位文件 讀 rb模式

f = open("helloworld2", 'rb')

文件句柄:

"helloworld2" 表示讀的文件的文件名,

"rb" 代表二進位文件讀的模式

用到rb模式有兩種情況,一是網路傳輸只能用二進位格式,二是二進位文件必須用二進位打開

f = open("helloworld2", 'rb')
print(f.readline())
print(f.readline())
f.close()

#輸出
b'Hello World\r\n'
b'Python\r\n'

#b表示位元組,byte類型

6.二進位文件 寫 wb模式

 f = open("helloworld", 'wb')

文件句柄:

"helloworld" 表示讀的文件的文件名,

"wb" 代表二進位文件寫的模式

f = open("helloworld", 'wb')
f.write("hello Tom\n".encode())
f.close()

#helloworld文件原本的內容是
Hello Word!

#運行之後helloworld文件的內容變為
hello Tom

7.寫 a模式

f = open("heloworld2", 'a', encoding="utf-8")

文件句柄:

"helloworld2" 表示寫讀的文件的文件名,

'a' 代表append追加,不覆蓋原來的文件了,繼續往後寫,但是還是不能讀文件

encoding="utf-8" 表示字元編碼形式為utf-8。

f = open("helloworld2", 'a', encoding="utf-8")
f.write("syq\n")
f.write("jxx\n")
f.close()

#helloworld2原來的內容為
Hello World
Python
wll
ly
jiang

#執行之後的內容為
Hello World
Python
wll
ly
jiang
syq
jxx

8.a+ 追加讀寫,但也只能是在後面寫

9.讀文件

(1)讀文件的兩種方式

f = open("helloworld2", 'r', encoding="utf-8")
s = f.read().strip()
print(s)
f = open("helloworld2", 'r', encoding="utf-8")
info = f.readlines()
for i in info:
    print(i.strip())
f.close()

(2)讀前三行

f = open("helloworld2", 'r', encoding="utf-8")
for i in range(3):
    print(f.readline().strip())

#輸出
Hello World
Python
wll

(3)第三行上下分割

f = open("helloworld2", 'r', encoding="utf-8")
for index, line in enumerate(f.readlines()):
    if index == 3:
        print("---------------------")
        continue
    print(line.strip())

#輸出
Hello World
Python
wll
---------------------
jiang
syq
jxx
# 高效的迴圈方法
f = open("helloworld2", 'r', encoding="utf-8")
count = 0
for line in f:
    if count == 3:
        print("---------------------")
        count += 1
        continue
    print(line.strip())
    count += 1

#輸出
Hello World
Python
wll
---------------------
jiang
syq
jxx

10.文件修改

f = open("helloworld2", "r", encoding="utf-8")
f_new = open("helloworld2.bak", "w", encoding="utf-8")

for line in f:
    if "wll" in line:
        line = line.replace("wll", "wulanlan")
    f_new.write(line)
f.close()
f_new.close()

#helloworld2內容
Hello World
Python
wll
ly
jiang
syq
jxx

#helloworld.bak內容
Hello World
Python
wulanlan  #將wll改成了wulanlan
ly
jiang
syq
jxx

11.f.close()是不是經常忘了寫,總是經常忘記關閉,就用with,為了幫你自動關閉文件

with open("helloworld2", "r", encoding="utf-8") as f, \
        open("helloworld", "r", encoding="utf-8") as f2:  # 打開多個文件,一行不應該超過八十個字元,所以折行寫
            for line in f:
                print(line.strip())

#輸出
Hello World
Python
wll
ly
jiang
syq
jxx

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 類與類之間的關係 在我們的世界中事物和事物之間總會有一些聯繫. 在面向對象中. 類和類之間也可以產生相關的關係 1. 依賴關係 執行某個動作的時候. 需要xxx來幫助你完成這個操作. 此時的關係是最輕的. 隨時可以更換另外一個東西來完成此操作 2. 關聯關係 在對象裡面埋對象 self.girlFr ...
  • 1.自動裝箱和自動拆箱 裝箱就是自動將基本數據類型轉換為包裝器類型; (1)Integer it = 200; 實際上是:Integer it3 = Integer.valueOf(100); 自動裝箱功能:把int類型自動裝載到Integer中 先裝箱,再賦值 拆箱就是 自動將包裝器類型轉換為基本 ...
  • 當項目使用分散式架構時,就會有可能出現客戶端數據重覆提交的情況 比如,當你向伺服器發起一個借貸命令時,如果手速夠快,可能會向後臺的兩個撥款伺服器發起同一個請求 此時, 如果不進行處理, 後臺可能會向用戶撥款兩次, 但是用戶只有一次的借錢記錄. 這時, 也是用到了常用sso登錄時的技術Redis, 前 ...
  • 這一節主要講解了C語言里變數在記憶體中的位置,各種變數的使用區別,以及如何在堆棧中分配空間等C語言記憶體管理問題。 自動變數與靜態變數 auto自動變數 auto是預設的關鍵字,如實際中int a,實際為auto int a,{}內部的都是auto變數,不用為此類變數申請或者釋放空間,它都是自動完成的。 ...
  • 本節內容主要介紹了C語言程式的基本數據類型。介紹了基本類型的整數類型和浮點類型,以及簡單的講解了void類型。整數類型又包括int型、char型、bool型,浮點類型又包括單精度浮點數(float)和雙精度浮點數(double)。 ...
  • Python學習心得——模塊的導入 在Python語言的編輯器里,除了預設的內置函數外,其他函數的調用,必須先通過import語句將其導入才能使用。 import語句導入整個函數模塊 導入方法: import 函數模塊名 示例 新建一個名為 func_test.py 的文件,內容為: 保存並退出,在 ...
  • 前言 本篇主要講述是Java中JDK1.8的一些新語法特性使用,主要是Lambda、Stream和LocalDate日期的一些使用講解。 Lambda Lambda介紹 Lambda 表達式(lambda expression)是一個匿名函數,Lambda表達式基於數學中的λ演算得名,直接對應於其中 ...
  • 1.變數名 命名規則: 在名稱中只能使用字母字元、數字和下劃線; 名稱的第一個字元不能是數字; 不能將C++關鍵詞用作名稱。 常用的首碼:n-整數,str/sz-字元串,b-布爾值,p-指針,c-單個字元,m-類成員值 2.整形 short 至少16位; int至少與short一樣長; long至少 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...