python 檔案i/o
讀取鍵盤輸入:
python提供了兩個內建函式從標準輸入讀入一行文字,預設的標準輸入是鍵盤:
1. raw_input
#函式從標準輸入讀取乙個行,並返回乙個字串(去掉結尾的換行符)
str = raw_input("
請輸入:")
print ("
你輸入的內容是:
", str)
#結果:
請輸入:hello python!
你輸入的內容是: hello python!
注:python3以後的版本就將該函式刪除了(可能是和input太像了,input完全可以替代它)
2.input
input([prompt])函式和raw_input([prompt])函式基本類似
str = input("請輸入:")
"你輸入的內容是:
", str
#input 可以接收乙個python表示式作為輸入,並將運算結果返回
#結果:
請輸入:[x*5 for x in range(2,10,2)]
你輸入的內容是: [10, 20, 30, 40]
把資料輸入到檔案中
fp = open('text.txt', 'a+')print("helloworld", file=fp)
fp.close()
注意:要寫成file=fp 如果只寫fp會建立新檔案,但不會再檔案內輸入內容
引數型別:
b: 二進位制模式
+:開啟乙個檔案進行更新(可讀可寫)
r:以唯讀方式開啟檔案。檔案的指標將會放在檔案的開頭。這是預設模式
a:開啟乙個檔案用於追加。如果該檔案已存在,檔案指標將會放在檔案的結尾。也就是說,新的內容將會被寫入到已有內容之後。如果該檔案不存在,建立新檔案進行寫入
write()方法
write()方法不會在字串的結尾新增換行符('\n'):
#開啟乙個檔案
fo = open("
foo.txt
", "w"
)fo.write(
"www.runoob.com!\nvery good site!\n")
#關閉開啟的檔案
fo.close()
$ cat foo.txt
www.runoob.com!
very good site!
read()方法
#在這裡,被傳遞的引數是要從已開啟檔案中讀取的位元組計數。該方法從檔案的開頭開始讀入,
#如果沒有傳入count,它會嘗試盡可能多地讀取更多的內容,很可能是直到檔案的末尾。
fo = open("
foo.txt
", "r+"
)str = fo.read(10)
"讀取的字串是 :
", str
讀取的字串是 : www.runoob
檔案定位
seek(offset [,from]):
offset:要移動的位元組數
#開啟乙個檔案
fo = open("
foo.txt
", "r+"
)str = fo.read(10)
"讀取的字串是 :
", str #
查詢當前位置
position =fo.tell()
"當前檔案位置 :
", position #
把指標再次重新定位到檔案開頭
position =fo.seek(0, 0)
str = fo.read(10)
"重新讀取字串 :
", str
#關閉開啟的檔案
fo.close()
讀取的字串是 : www.runoob
當前檔案位置 : 10重新讀取字串 : www.runoob
python 異常處理
語法:
try:《語句》 #
執行別的**
except
《名字》:
《語句》 #
如果在try部份引發了'name'異常
except
《名字》,《資料》:
《語句》 #
如果引發了'name'異常,獲得附加的資料
else
:《語句》 #
如果沒有異常發生
try的工作原理是,當開始乙個try語句後,python就在當前程式的上下文中作標記,這樣當異常出現時就可以回到這裡,try子句先執行,接下來會發生什麼依賴於執行時是否出現異常。
例如:
try: fh = open("
testfile
", "w"
) fh.write(
"這是乙個測試檔案,用於測試異常!!")
except
ioerror:
"error: 沒有找到檔案或讀取檔案失敗
"else
:
"內容寫入檔案成功
"fh.close()
使用exception不帶任何異常型別
此時try-except語句捕獲所有發生的異常。
但這不是乙個很好的方式,我們不能通過該程式識別出具體的異常資訊。
try-fnally語句
try-finally 語句無論是否發生異常都將執行最後的**
try: fh = open("
testfile
", "w"
) fh.write(
"這是乙個測試檔案,用於測試異常!!")
finally
:
"error: 沒有找到檔案或讀取檔案失敗
"
異常的引數
乙個異常可以帶上引數,可作為輸出的異常資訊引數。
#定義函式
deftemp_convert(var):
try:
return
int(var)
except
valueerror, argument:
"引數沒有包含數字\n
", argument
#呼叫函式
temp_convert("
xyz");
$ python test.py引數沒有包含數字invalid literal forint()withbase10:'xyz'
觸發異常
raise[exception[,args [,traceback]]]
語句中 exception 是異常的型別(例如,nameerror)引數標準異常中任一種,args 是自已提供的異常引數。
最後乙個引數是可選的(在實踐中很少使用),如果存在,是跟蹤異常物件
#定義函式
defmye( level ):
if level < 1:
raise exception,"
invalid level!"#
觸發異常後,後面的**就不會再執行
try:
mye(0)
#觸發異常
except
exception,err:
print 1,err
else
:
print 2$ python test.py
1 invalid level!
自定義異常
異常應該是典型的繼承自exception類,通過直接或間接的方式。
classnetworkerror(exception):
def__init__
(self, arg):
self.args =arg
try:
raise networkerror("
bad hostname")
except
networkerror as e : #e 是用於建立networkerror類的例項 注:3.9版本後都改用as,之前版本可以用逗號,
print(e.args)
python學習筆記3
1 字串的格式化操作 format variable format 是格式的樣式,variable 是要被格式化的變數 format 有如下幾種形式 o 將數值轉換為八進位制 x 將數值轉換為十六進製制 d 整數轉換符號 s 字串轉換符號 如下 o 100 144 o 100 加入乙個 號可輸出標準...
python 學習筆記3
2014 10 23 三種內建的資料結構 列表 元組和字典 list len list list.sort 修改列表本身,而不是返回乙個修改後的列表 列表時可變的,字串不可變 for item in list 遍歷 del list 0 刪除專案,自動補齊。print語句的結尾的逗號消除列印的換行符...
Python學習筆記3
條件和迴圈語句 生成隨機數的函式,此處說明一下,python是通過乙個方程來產生隨機數的,所以這些隨機數並不是真正隨機的,產生他們的方式叫做偽隨機。載入模組,本人理解模組類似c裡的庫,模組 module 含有可供其他程式使用的 的檔案,這些模組通常是按照一定的相關性進行組織的,載入模組使用 impo...