文章目錄
第九章 文件
9.1 從文件中讀取數據
9.1.1 讀取整個文件
pi.txt
3.14159
26535
89793
with open('pi.txt','r') as file_object:
contents = file_object.read()
print(contents)
輸出:
3.14159
26535
89793
with open()
可以不需要在訪問文件後關閉,隨着with的結束,文件會自動關閉open()
將目標文件打開,當做一個對象。read()
將文件中所有內容讀取爲一個長長的字符串- 輸出的文本最後有空行是因爲read()達到文件尾時會返回一個空字符串。消除空行可用rstrip()
9.1.2 逐行讀取
with open('pi.txt','r') as file_object:
for line in file_object:
print(line)
輸出:
3.14159
26535
89793
每行之間都有一個空行,是因爲文本文件每行結尾都有一個換行符,而print()每次都會自動換行,所以多了一個換行。
將print(line)
改爲print(line.rstrip())
即可解決
9.1.3 創建一個包含文件各行內容的列表
with open('pi.txt','r') as file_object:
lines = file_object.readlines()
for line in lines:
print(line.strip())
readlines()
讀取文本中的每一行,並存儲在一個列表裏。
調用len()可以獲知文件內容的行數。
這樣可以讓在with open結束後依然可以使用文本內容。
9.1.4 replace()替換字符串的內容
s = 'I Love C++'
s.replace('C++','Python')
print(s)
I Love Python
9.2 寫入文件
9.2.1 寫入空文件
with open('filename', 'w') as fo:
fo.write('I love you')
打開文件,會發現文件內容爲:
I love you
9.2.2 寫入多行
with open('filename', 'w') as fo:
fo.write('I love you')
fo.write('I love you too')
打開文件,會發現文件內容爲:
I love youI love you too
write()不會像print()一樣自動換行,所以要自己添加換行符。
with open('filename', 'w') as fo:
fo.write('I love you\n')
fo.write('I love you too')
9.2.3 在文件後附加內容
就是打開模式改爲’a’
9.3 異常
9.3.1 ZeroDivisionError異常
如果程序中出現除以0的情況,程序將會反饋Traceback錯誤信息:ZeroDivisionError
9.3.2 try-except 代碼塊
當你認爲可能發生錯誤時,可編寫一個try-except
代碼塊來處理可能引發的異常。
try:
print(5/0)
except:
print("You can't divide by zero")
- 當
try
代碼塊出現異常時,Python將跳過try
代碼塊而去執行except
代碼塊。
9.3.3 else 代碼塊
num1 = 5
num2 = int(input())
answer = num1/num2
try:
print(5/0)
except:
print("You can't divide by zero")
else:
print(answer)
-當try
代碼塊執行成功時,將會接着執行else
代碼塊
9.3.4 FileNotFoundError異常
文件打開失敗時會返回改錯誤
9.3.5 split()處理字符串
split()
函數將字符串根據空格分隔,並創建一個 單詞列表
s = 'I love you'
words = s.split()
print(words)
[‘I’, ‘love’, ‘you’]
調用len()函數即可以獲知字符串單詞個數。
9.3.6 處理多個文件
有一種方法是將一系列文件名存在列表裏:
files = ['f1.txt', 'f2.txt', 'f3.txt']
for filename in files:
with open(filename):
...
9.3.7 使用pass語句跳過異常語句
try:
print(5/0)
except:
pass
pass
語句會讓Python什麼都不做,“一聲不吭”。