headfirstpython(第三章)–學習筆記

1.介紹基礎文件,輸入,輸出

open()
打開文件,一次傳入一行數據,可以結合for循環和readline()來使用

close()
用來關閉open打開的文件

the_file = open('sketch.txt')

the_file.close()

例子:

>>> data = open('/root/python_test/site_list.txt')
>>> print(data.readline())
www.godblessyuan.com

一些基礎的目錄管理函數

>>> import os
>>> os.getcwd()   #獲取當前目錄
'/root'
>>> os.chdir('/root/python_test')  #切換目錄
>>> os.getcwd()
'/root/python_test'
>>> 

2.需要對數據做一些處理,例如像分隔它,以冒號為分界符

>>> data = open('/root/python_test/headfirstpython/sketch.txt')
>>> for each_line in data:
...     (role,line_spoken) = each_line.split(':')   #這里使用idel時候,需要注意的是代碼之間的縮進
...     print role
...     print line_spoken
... 

Other Man
 Anyway, I did.

Man
 You most certainly did not!

Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
ValueError: too many values to unpack

遇到報錯了,報錯意思大概是太多值導致沒有被處理,檢查發現是因為有些數據是超過一個冒號的,所以這些數據會出錯,因為split()處理不了,但是檢查了split函數的使用說明,發現是可以支持這種情況的,

>>> help(each_line.split)
Help on built-in function split:

split(...)
S.split([sep [,maxsplit]]) -> list of strings

Return a list of the words in the string S, using sep as the
delimiter string.  If maxsplit is given, at most maxsplit
splits are done. If sep is not specified or is None, any
whitespace string is a separator and empty strings are removed
from the result.
(END) 

1.檢查方式可以參考上面的方法。

2.支持這種情況的參數是一個叫maxsplit的參數,如果有maxsplit的話,那么至多是maxsplit的數量以上的分界符才會被處理,這樣就很好的避免太多分界符的情況了。

如這樣:

data = open('sketch.txt')

for each_line in data:
    (role, line_spoken) = each_line.split(':', 1)
    print role
    print line_spoken

data.close()

不過,即使加了參數,還是遇到報錯了

Man
 Oh no you didn't!

Other Man
 Oh yes I did!

Man
 Oh look, this isn't an argument!

Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
ValueError: need more than 1 value to unp

這里是說需要超過一個值去處理,查看了數據,發現是有些數據沒有冒號導致程序處理失敗。

3.增加邏輯來處理

首先通過觀察find()方法對于不同的數據返回的值是不同的。

>>> each_line = 'iiiii' 
>>> each_line.find(':')
-1
>>> each_line = 'iiiii:'
>>> each_line.find(':') 
5
>>> 

然后可以使用的邏輯有2種,一種是if判斷,另外一種是try:expoet

try:
    你的代碼(可能會導致運行錯誤的)
except:
    錯誤回復代碼

這種方式的機制是通過捕獲某代碼的錯誤,然后執行響應的修復代碼,例子:

data = open('sketch.txt')

for each_line in data:
    try:
        (role, line_spoken) = each_line.split(':', 1)
        print role
        print line_spoken
    except:
        pass

data.close()

如果

        (role, line_spoken) = each_line.split(':', 1)
        print role
        print line_spoken

這里有其中一句代碼是執行失敗的,都會轉到pass里面去,pass代表空語句,或者null,什么也不做。

或者就是使用最簡單的if判斷

for each_line in data:
    if not each_line.find(':') == -1:   #not關鍵字是將一個條件取反
        (role, line_spoken) = each_line.split(':', 1)
        print(role, end='')
        print(' said: ', end='')
        print(line_spoken, end='')

data.close()

不過需要注意的是,像下面這種多重try:except的代碼是很容易影響到我們判斷那一部分代碼才是真正有問題的代碼,因為無論里面和外面的try出錯了,都會返回 print('The datafile is missing!'),這樣就不能判斷是那部分代碼有問題了。

try:
    data = open('sketch.txt')

    for each_line in data:
        try:
            (role, line_spoken) = each_line.split(':', 1)
            print role
            print line_spoken
        except:
            pass

    data.close()
except:
    print('The datafile is missing!')

所以需要加一些標記,標識(ValueError-數據不符合期望的格式時會出現,IOError-數據無法正常訪問時會出現。)

try:
    data = open('sketch.txt')

    for each_line in data:
        try:
            (role, line_spoken) = each_line.split(':')
            print role
            print line_spoken
        except ValueError:
            pass

    data.close()
except IOError:
    print('The datafile is missing!')

http://www.godblessyuan.com/2015/04/20/head_first_python_chapter_3_learning/

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,362評論 6 537
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,013評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,346評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,421評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,146評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,534評論 1 325
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,585評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,767評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,318評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,074評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,258評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,828評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,486評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,916評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,156評論 1 290
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,993評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,234評論 2 375

推薦閱讀更多精彩內容

  • 第2章 基本語法 2.1 概述 基本句法和變量 語句 JavaScript程序的執行單位為行(line),也就是一...
    悟名先生閱讀 4,188評論 0 13
  • 今天早上起來處理了一個突發時間,最近有點驚弓之鳥了,碰到不順就以為是商業找茬,好在處理方案上已經安排妥當了。團隊很...
    羅洪綺閱讀 111評論 0 0
  • 突然給了我自由,我卻忘記了如何行走。 好吧,我在整理自己的思緒,我無端端地死了,然后無緣無故來到這個奇葩的世界,再...
    Yan96閱讀 204評論 0 1
  • 1.首先我們可以使用Unity插件來做但是bug太多,試了好多次沒有導出成功。 2.所以打算使用第二種方法,使用m...
    Lazy1閱讀 8,943評論 0 1
  • 本文非常規搜集文,請放心食用 中午的時候,群里有人問,會不會PS,大家都說做設計能不會PS么?之后閑聊發現,有些從...
    鬼燈森林閱讀 3,061評論 30 221