Python小白入門:文件、異常處理和json格式存儲數據

這里寫自定義目錄標題

      • 所用資料
  • 一、從文件中讀取數據
    • 1.1 讀取整個文件
    • 1.2 文件路徑
    • 1.3 逐行讀取
    • 1.4 創建一個包含文件各行內容的列表
    • 1.5 使用文件的內容
    • 1.6 包含一百萬位的大型文件
    • 1.7 圓周率值中包含你的生日嗎
    • 練習題
  • 二、寫入文件
    • 2.1 寫入空文件
    • 2.2 寫入多行
    • 2.3 附加到文件
    • 練習題
  • 三、異常
    • 3.1 ZeroDivisionError異常
    • 3.2 使用 try - except 模塊
    • 3.3 try - except - else 代碼塊
    • 3.4 處理 FileNotFoundError 異常
    • 3.5 分析文本的字符
    • 3.6 分析多個文件
    • 3.7 遇到異常時保持靜默
    • 練習題
  • 四、存儲數據
    • 4.1 使用json.dump( )和json.load( )
    • 4.2 保存和讀取用戶生成的數據

所用資料

代碼中所用到的文件可以從下面的網站進行下載:
https://www.ituring.com.cn/book/2784
在這里插入圖片描述

一、從文件中讀取數據

1.1 讀取整個文件

在這里插入圖片描述

with open('files/pi_digits.txt') as file_object:contents = file_object.read()
print(contents)

在這里插入圖片描述

  • open函數

打開一個文件。接收參數為需要打開的文件名。Python會在當前執行的文件所在目錄下查找指定文件,因此需要把pi_digits.txt文件放在執行文件的同目錄下。
open函數返回一個表示文件的對象,Python將通過as關鍵字該對象賦予file_object。

  • with關鍵字

再不需要訪問文件后,Python會將其自動關閉。比直接使用close函數(關閉文件函數)更加安全。

  • read函數

讀取文件內容,以字符串形式賦給contents變量。read函數在讀取到文件末尾時會返回一個空字符串,打印出來就是一個空行,可以對contents中使用rstrip函數進行結尾的空行刪除。

with open('pi_digits.txt') as file_object:contents = file_object.read()
print(contents.rstrip())

在這里插入圖片描述
可以看到空白行被刪除掉了。

1.2 文件路徑

  • 相對路徑: 相對于當前運行的程序所在的目錄位置進行查找。如當前運行的程序為python_work,其中有一個名為files的文件夾存儲了file.txt文件,路徑為: files\file.txt,python會自動在python_work中尋找。

  • 絕對路徑:計算機中文件存儲的準確位置,如:C:學習\Python從入門到實踐第二版源代碼文件\源代碼文件\chapter_10。因為絕對路徑較長,一般會將該字符串先賦給一個變量file_path,然后傳入Open函數中

:顯示文件路徑時,Windows系統使用反斜杠(\ )而不是斜杠(/ ),但在代碼中使用斜杠來代表路徑。

1.3 逐行讀取

以每一行的方式讀取文件:使用for循環。

file_path = 'files/pi_digits.txt'
with open(file_path) as file_object:for line in file_object:print(line.rstrip())

使用for循環,讓變量line代表文件中的每一行進行輸出。

在這里插入圖片描述

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

  • readlines函數:從文件中讀取每一行并將其存儲在一個列表中。
  • readline函數:從文件中讀取一行,并作為字符串保存。
file_path = 'files/pi_digits.txt'
with open(file_path) as file_object:line = file_object.readline()lines = file_object.readlines()print(line)
print(lines)

代碼使用lines接收readlines函數讀到的存儲文件中的每一行內容的列表。
可以看到每一行后面都有一個換行符。

在這里插入圖片描述
讀取到的lines即可使用for循環進行每一行內容的讀取。

1.5 使用文件的內容

將文件讀取到內存中后即可使用數據。

Python中有三個去除頭尾字符、空白符的函數,它們依次為:

  • strip: 用來去除頭尾字符、空白符(包括\n、\r、\t、’ ‘,即:換行、回車、制表符、空格)
  • lstrip:用來去除開頭字符、空白符(包括\n、\r、\t、’ ‘,即:換行、回車、制表符、空格)
  • rstrip:用來去除結尾字符、空白符(包括\n、\r、\t、’ ',即:換行、回車、制表符、空格)

為了把文件中拿到的內容整合成一行沒有中間空白字符的字符串,使用strip函數進行去空白。

去空白函數

file_path = 'files\pi_digits.txt'with open(file_path) as file_objects:lines = file_objects.readlines()pi_strings = ""
for line in lines:pi_strings += line.strip()print(pi_strings)
print(len(pi_strings))
pi_number = float(pi_strings)
print(pi_number)
print(type(pi_number))

strip函數不僅可以刪除每行后面的空白字符,還可以把每行開頭的空白符也進行刪除。這樣就得到了一個pi_string的字符串。

如果想后續進行數值的計算,需要把字符串轉為數值進行使用,可以使用float函數進行類型轉換。

在這里插入圖片描述

1.6 包含一百萬位的大型文件

所需文件:

在這里插入圖片描述

讀取一個精確到小數點后1000000位的圓周率文件。

file_path = 'files/pi_million_digits.txt'with open(file_path) as file_objects:lines = file_objects.readlines()pi_string = ""
for line in lines:pi_string += line.strip()print(pi_string[:52])
print(len(pi_string))

打印前52位,然后輸出一下字符串的長度,證明確實是有1000002位數。

在這里插入圖片描述

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

可以查看一下自己的生日是否在圓周率中,如果存在,使用index函數查找到生日字符串在pi字符串中的位置并且輸出。

file_path = 'files/pi_million_digits.txt'with open(file_path) as file_objects:lines = file_objects.readlines()pi_string = ""
for line in lines:pi_string += line.strip()birthday = input("Please enter your birthday, in the form mmdd: ")if birthday in pi_string:print(f"Your birthday appears in the first million digits of pi at the index of {pi_string.index(birthday)}!")
else:print("Sorry~")

練習題

在這里插入圖片描述
在這里插入圖片描述

file_path = 'files/learning_python.txt'with open(file_path) as file_objects:contents = file_objects.read()
print(contents)with open(file_path) as file_objects:for line in file_objects:print(line.rstrip())with open(file_path) as file_objects:lines = file_objects.readlines()
print(lines)

在這里插入圖片描述

file_path = 'files/learning_python.txt'with open(file_path) as f:lines = f.readlines()for line in lines:print(line.rstrip().replace('Python','c++'))

在這里插入圖片描述

二、寫入文件

2.1 寫入空文件

調用open() 時提供了兩個實參:

  • 第一個實參:要打開的文件的名稱。
  • 第二個實參(‘w’ ):告訴Python要以寫入模式打開這個文件。

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

如果要寫入的文件不存在,函數open() 將自動創建它

然而,以寫入模式(‘w’)打開文件時千萬要小心,因為如果指定的文件已經存在,Python將在返回文件對象前清空該文件的內容。

Python只能將字符串寫入文本文件。 要將數值數據存儲到文本文件中,必須先使用函數str() 將其轉換為字符串格式。

filename = 'programming.txt'with open(filename,'w') as f:f.write('I love programming!')

在這里插入圖片描述

2.2 寫入多行

在writer函數中添加換行符。

filename = 'programming.txt'with open(filename,'w') as f:f.write('I love writing!\n')f.write('I love programming!\n')

在這里插入圖片描述

2.3 附加到文件

如果不想覆蓋掉之前的內容,而是想給文件添加內容的話,可以以附加模式(a) 打開文件。

以附加模式打開文件時,Python不會在返回文件對象前清空文件的內容,而是將寫入文件的行添加到文件末尾。

如果指定的文件不存在,Python將為你創建一個空文件。

filename = 'programming.txt'with open(filename,'a') as f:f.write('I love painting!\n')f.write('I love swimming!\n')with open(filename) as f:lines = f.read()
print(lines)

在這里插入圖片描述

練習題

在這里插入圖片描述

10-3

filename = 'guests.txt'
name = input('enter the name: ')
with open(filename,'w') as f:f.write(name.title())

10-4

filename = 'guest_book.txt'
with open (filename,'a') as f:while True:name = input("Enter the name: ")if name == 'q':breakprint(f"Hi, {name.title()} !")f.write(f"{name.title()}\n")

在這里插入圖片描述
在這里插入圖片描述
10-5

filename = 'reason.txt'
with open(filename,'a') as f:while True:reason = input('Enter the reason why you like programming')if reason=='quit':breakf.write(f"{reason}\n")

三、異常

異常:一個特殊對象,管理程序執行期間發生的錯誤。
每當發生讓Python不知所措的錯誤時,它都會創建一個異常對象。如果你編寫了處理該異常的代碼,程序將繼續運行;如果未對異常進行處理,程序將停止并顯示traceback,其中包含有關異常的報告。

異常是使用try-except 代碼塊處理的。
try-except 代碼塊讓Python執行指定的操作,同時告訴Python發生異常時怎么辦。使用try-except 代碼塊時,即便出現異常,程序也將繼續運行:顯示你編寫的友好的錯誤消息,而不是令用戶迷惑的traceback。

3.1 ZeroDivisionError異常

ZeroDivisionError異常:被除數不能為0的異常。

在這里插入圖片描述

3.2 使用 try - except 模塊

當認為可能會發生錯誤時,可編寫一個try-except 代碼塊來處理可能引發的異常。

  • try下寫讓Python嘗試運行一些代碼,
  • except下寫如果這些代碼引發了指定的異常該怎么辦。
try:print(5/0)
except ZeroDivisionError:print("You can't divide by zero! ")

將導致錯誤的代碼行 print(5/0) 放在一個try 代碼塊中。如果try 代碼塊中的代碼運行起來沒有問題,Python將跳過except 代碼塊;如果try 代碼塊中的代碼導致了錯誤,Python將查找與之匹配的except 代碼塊并運行其中的代碼。

在本例中,try 代碼塊中的代碼引發了ZeroDivisionError 異常,因此Python查找指出了該怎么辦的except 代碼塊,并運行其中的代碼。這樣,用戶看到的是一條友好的錯誤消息,而不是traceback。

3.3 try - except - else 代碼塊

使用try-except進行異常處理,而依賴try代碼塊成功執行的代碼都應放到else代碼塊中。

while True:n1 = input("First number: ")if n1 == 'q':breakn2 = input('Second number: ')if n2 == 'q':breaktry:result = int(n1)/int(n2)except ZeroDivisionError:print("You can't divide by 0!")else:print(result)

在這里插入圖片描述

3.4 處理 FileNotFoundError 異常

FileNotFoundError 異常:找不到文件
在這里插入圖片描述

filename = 'alice.txt'try:with open(filename) as f:contents = f.read()except FileNotFoundError:print(f"{filename} doesn't exit!")

在這里插入圖片描述

3.5 分析文本的字符

統計alice.txt文件中所有的英文單詞數量。
在這里插入圖片描述

  • split()函數:為一個字符串中的英文單詞創建一個單詞列表
  • encoding = ‘utf-8’:當系統默認編碼和讀取文件使用的編碼不一致時使用。
filename = 'alice.txt'try:with open(filename,encoding = 'utf-8') as f:contents = f.read()except FileNotFoundError:print(f"{filename} doesn't exit!")else:words = contents.split()num_word = len(words)print(f"The file {filename} has about {num_word} words.")

在這里插入圖片描述

3.6 分析多個文件

filenames = [‘alice.txt’,‘siddhartha.txt’,‘mobd_dick.txt’]

其中siddhartha.txt文件不存在。使用for循環對文件列表中的文件一次讀取并且分析。

def count_words(filename):try:with open(filename, encoding='utf-8') as f:contents = f.read()except FileNotFoundError:print(f"{filename} doesn't exit!")else:words = contents.split()num_word = len(words)print(f"The file {filename} has about {num_word} words.")filenames = ['alice.txt','siddhartha.txt','moby_dick.txt']
for filename in filenames:count_words(filename)

在這里插入圖片描述

3.7 遇到異常時保持靜默

如果想要發生異常時程序什么也不說,像什么都沒有發生過一樣繼續執行,那就在except模塊下使用pass語句

def count_words(filename):try:with open(filename, encoding='utf-8') as f:contents = f.read()except FileNotFoundError:passelse:words = contents.split()num_word = len(words)print(f"The file {filename} has about {num_word} words.")filenames = ['alice.txt','siddhartha.txt','moby_dick.txt']
for filename in filenames:count_words(filename)

在這里插入圖片描述

練習題

在這里插入圖片描述
在這里插入圖片描述

10-6

try:n1 = int(input("the first number is :"))n2 = int(input("The second number is :"))
except ValueError:print("Please enter number not text!")
else:print(n1+n2)

10-7

while True:try:n1 = int(input("the first number is :"))n2 = int(input("The second number is :"))except ValueError:print("Please enter number not text!")else:print(n1+n2)

10-8

四、存儲數據

JSON格式:存儲數據結構,最初是為JavaScript開發,但隨后成了一種常見格式,被包括Python在內的眾多語言采用。

模塊json 讓你能夠將簡單的Python數據結構轉儲到文件中,并在程序再次運行時加載該文件中的數據。

還可以使用json 在Python程序之間分享數據。

更重要的是,JSON數據格式并非Python專用的,JSON格式存儲的數據可以與使用其他編程語言共享。

4.1 使用json.dump( )和json.load( )

  • 函數json.dump() : 把數據存儲在文件中。接受兩個實參,要存儲的數據,以及可用于存儲數據的文件對象。

  • json.load() : 把數據讀取到內存中。

import json
numbers = [2,3,4,5,7.11,13]
filename = 'numbers.json'
with open(filename,'w') as f:json.dump(numbers,f)

首先import json模塊,然后使用json.dump把數字列表存儲進number.json文件中。

在這里插入圖片描述

使用json.load(f)把numbers.json文件中的數據結構存進內存中,然后打印輸出。

import json
filename = 'numbers.json'
with open(filename) as f:numbers = json.load(f)
print(numbers)

在這里插入圖片描述

4.2 保存和讀取用戶生成的數據

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/35816.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/35816.shtml
英文地址,請注明出處:http://en.pswp.cn/news/35816.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Maven 生成(打包)帶有依賴的可以直接執行的一個 jar 包

在pom中增加如下內容 <build><plugins><plugin><artifactId>maven-assembly-plugin</artifactId><configuration><archive><manifest><mainClass>com.example.xxx.YourClass</mainClass></manifest></…

酷開系統丨酷開會員,帶你解鎖K歌新姿勢

不管時代怎么變化&#xff0c;K歌這項娛樂活動始終深受人們的喜愛。不知道你有沒有遇到過這種情況&#xff1a;周末在家宅了一天&#xff0c;突然心血來潮想去KTV唱歌&#xff0c;但奈何外面過于悶熱實在不想出門&#xff0c;可在手機上唱歌又不過癮&#xff0c;讓人很是苦惱……

tomcat入門介紹

tomcat官網下載8.5.9版本&#xff0c;官網地址&#xff1a;https://tomcat.apache.org/download-80.cgi 下載完成后直接解壓即可 tomcat目錄 解壓后&#xff0c;可以看到tomcat有以下目錄 /bin - 啟動、關閉和其他腳本 *.sh后綴是linux下的腳本文件*.bat后綴windows系統下的…

繪畫AI工具的介紹與使用----強到離譜-2023年必備免費好用的AI工具

一.繪畫AI www.seaart.ai 這個是網站地址&#xff0c;進去之后直接注冊登錄即可&#xff0c;幾乎都是免費使用&#xff0c;不用擔心是否要VIP 點擊網站進入之后登錄&#xff0c;然后進入主頁面&#xff0c;一張圖片給你介紹清楚主頁 我會根據菜單欄來給大家演示&#xff0c;首…

web會話跟蹤以及JWT響應攔截機制

目錄 JWT 會話跟蹤 token 響應攔截器 http是無狀態的&#xff0c;登錄成功后&#xff0c;客戶端就與服務器斷開連接&#xff0c;之后再向后端發送請求時&#xff0c;后端需要知道前端是哪個用戶在進行操作。 JWT Json web token (JWT), 是為了在網絡應用環境間傳遞聲明而…

Unity特效總覽

一、粒子 Unity中的粒子組件叫做Particle System。 粒子系統顧名思義&#xff0c;與“微粒”有關。粒子系統會生成和發射很多粒子&#xff0c;通過控制粒子的生成數量、大小、角度、速度、貼圖和顏色等眾多屬性&#xff0c;可以實現或真實或炫酷的各種效果。其中&#xff0c;…

leetcode做題筆記76最小覆蓋子串

給你一個字符串 s 、一個字符串 t 。返回 s 中涵蓋 t 所有字符的最小子串。如果 s 中不存在涵蓋 t 所有字符的子串&#xff0c;則返回空字符串 "" 。 注意&#xff1a; 對于 t 中重復字符&#xff0c;我們尋找的子字符串中該字符數量必須不少于 t 中該字符數量。如果…

【Unity】VS Code 沒有智能提示 Unity 中的類

正常來說&#xff0c;VS Code中會對部分輸入類名進行提示&#xff0c;如下圖所述 假如你從Unity 中進入 VS Code后發現沒有提示相關 Unity的類&#xff0c;可能是 Unity 中 有關于 VS Code的相關Package 沒有跟著 VS Code升級到最新版本。 點擊Unity Windows 下拉框中的 Pac…

如何在電力行業運用IPD?

電力行業是國民經濟眾多壟斷行業中較早實施改革的行業之一。近幾年我國電力行業保持著較快的發展速度&#xff0c;也取得了很大的成績&#xff0c;發電機容量和發電量居世界首位。2015-2020年&#xff0c;全國發電量不斷攀升。 電力是以電能作為動力的能源。電力的發現和應用掀…

簡繪ChatGPT支持Midjourney繪圖 支持stable diffusion繪圖

簡繪支持Midjourney繪圖和stable diffusion繪圖。 這意味著簡繪具備Midjourney繪圖和stable diffusion繪圖功能的支持。

生信豆芽菜-單基因表達比較

網址&#xff1a;http://www.sxdyc.com/panCancerExpCom 該工具主要用于查看單基因在泛癌的癌組織和癌旁組織中表達比較&#xff0c;可以只選擇TCGA數據庫&#xff0c;也可以選擇TCGAGTEx數據庫&#xff08;GTEx數據庫&#xff0c;存放了正常組織全基因的表達譜&#xff09; …

人類智能的三個基本要素

人類智能的三個基本要素包括&#xff1a;適應性、靈活性和從稀疏觀察中做出一般推斷的能力。這些要素使得智能系統能夠適應不同的環境和任務&#xff0c;處理多樣性和復雜性&#xff0c;并從有限的信息中進行學習和推理&#xff0c;對于構建更強大和智能的人工智能系統至關重要…

ERROR: While executing gem ... (Gem::FilePermissionError)

sudo gem install -n /usr/local/bin cocoapodsERROR: While executing gem ... (Gem::FilePermissionError)You dont have write permissions for the /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/gems/2.6.0 directory.解決辦法&#xff1a; 1.刪…

limereport報表使用

在這里我使用報表是以報表的形式顯示數據庫的信息。所以首先需要準備的資料有&#xff1a;limereport源碼&#xff0c;還有數據庫&#xff0c;我這里使用的是qsqlite數據庫。 1、下載limereport報表源碼 2、運行自帶的案例&#xff1a;demo_r1 3、點擊 “Run Report Designer”…

【Spring專題】手寫簡易Spring容器過程分析——引導篇

目錄 前言說在前面閱讀準備 思路整理手寫源碼示例一、手寫前的準備1.1 注解1.2 測試Bean1.3 調用實例 二、構造方法&#xff08;構建基本流程&#xff09;三、實現scan()方法3.1 doGetScanPackage()&#xff1a;獲取掃描路徑3.2 doLoadClassFromDiskAndScan()&#xff1a;從電腦…

HTML大于號、小于號、空格、引號等常用的轉義代碼寫法

在這里插入代碼片HTML 原始碼 顯示結果 描述 < < 小於號或顯示標記 > > 大於號或顯示標記 &amp; & 可用於顯示其它特殊字符 &quot; " 引號 &reg; 己注冊 © © 版權 &trade; ? 商標 &ensp; 半…

dumpsys window

查詢當前活動包名以及類名 adb shell dumpsys window | findstr mCurrentFocusdump出當前所有的窗口信息 adb shell dumpsys window windows

CNN的特性

1、位移不變性 它指的是無論物體在圖像中的什么位置&#xff0c;卷積神經網絡的識別結果都應該是一樣的。 因為CNN就是利用一個kernel在整張圖像上不斷步進來完成卷積操作的&#xff0c;而且在這個過程中kernel的參數是共享的。換句話說&#xff0c;它其實就是拿了同一張“通…

Java 面試八股文

參考&#xff1a; 2023年 Java 面試八股文&#xff08;20w字&#xff09;_json解析失敗_leader_song的博客-CSDN博客

MATLAB算法實戰應用案例精講-【深度學習】預訓練模型-Transformer

目錄 前言 2.Transformer直觀認識 3. Transformer的結構 3.1 Embedding 3.1.1 Input Embedding 3.1.2 Position Encoding 3.2 Encoder