DAY 130 2017.10.11
10.4.1 使用json.dump()和json.load()
使用json.dump()來編寫一個存儲一組數(shù)字的簡短程序,再使用json.load()編寫一個將這些數(shù)字讀取到內(nèi)存中的程序。
函數(shù)json.dump()接受兩個實參:要存儲的數(shù)據(jù)以及可用于存儲數(shù)據(jù)的文件對象。


DAY 131 2017.10.12
10.4.2 保存和讀取用戶生成的數(shù)據(jù)
對于用戶生成的數(shù)據(jù),使用json保存它們大有裨益,因為如果不以某種方式進行存儲,等程序停止運行時用戶的信息將丟失。例子:用戶首次運行程序時被提示輸入自己的名字,這樣再次運行程序時就記住他了。
存儲用戶的名字:

向名字被存儲的用戶發(fā)出問候:

DAY 132 2017.10.13
我們需要合并上面的兩個程序。這個程序運行時,我們將從文件username.json中獲取用戶名,因此我們首先編寫一個嘗試恢復(fù)用戶名的try代碼塊。如果這個文件不存在,我們就在except代碼塊中提示輸入用戶名,并將其存儲在username.json中,以便程序再次運行時能夠獲取它。

DAY 133 2017.10.14
10.4.3 重構(gòu)
將代碼分為一系列完成具體工作的函數(shù),這樣的過程被稱為重構(gòu)。重構(gòu)讓代碼更清晰、更易于理解、更容易擴展。

# Hello World program in Python
# --coding: utf-8 --
import json
def get_stored_username():
filename='username.json'
try:
with open(filename) as f:
username=json.load(f)
except FileNotFoundError:
return None
else:
return username
def greet_user():
username=get_stored_username()
if username:
print("Welcome back, "+username+" !")
else:
username=raw_input("What's your name?")
filename='username.json'
with open(filename,'w') as f:
json.dump(username,f)
print("We will remember you when you come back, "+username+" !")
greet_user()
DAY 135 2017.10.15

DAY 136 2017.10.16

# Hello World program in Python
# --coding: utf-8 --
import json
def get_stored_username():
"""如果存儲了用戶名,就獲取它"""
filename='username.json'
try:
with open(filename) as f:
username=json.load(f)
except IOError:
return None
else:
return username
def get_new_username():
username=raw_input("What's your name?")
filename='username.json'
with open(filename,'w') as f:
json.dump(username,f)
return username
def greet_user():
"""問候用戶名,并指出其名字"""
username=get_stored_username()
if username:
print("Welcome back, "+username+" !")
else:
username=get_new_username()
print("We will remember you when you come back, "+username+" !")
greet_user()
DAY 137 2017.10.17
學(xué)習(xí)使用Markdown

獻給寫作者的 Markdown 新手指南
在群里看到戰(zhàn)友推薦使用Markdown編輯文本,本來犯懶不想動,看到大家都開始使用,打起精神來把原先編輯好的文章重新又用Markdown編輯了一下,果然清晰多了,大贊!戰(zhàn)友們的學(xué)習(xí)態(tài)度給了自己很大的動力!
DAY 138-139 2017.10.18--2017.10.19
安裝Python和Pycharm
Pycharm及python安裝詳細教程
python下載地址:https://www.python.org/downloads/

pycharm下載地址:http://www.jetbrains.com/pycharm/download/#section=windows

DAY 140 2017.10.20
10.1 從文件中讀取數(shù)據(jù)
"文本文件可存儲的數(shù)據(jù)量多得難以置信:天氣數(shù)據(jù)、交通數(shù)據(jù)、社會經(jīng)濟數(shù)據(jù)、文學(xué)作品等。每當(dāng)需要分析或修改存儲在文件中的信息時,讀取文件都很有用,對數(shù)據(jù)分析應(yīng)用
程序來說尤其如此。例如,你可以編寫一個這樣的程序:讀取一個文本文件的內(nèi)容,重新設(shè)置這些數(shù)據(jù)的格式并將其寫入文件,讓瀏覽器能夠顯示這些內(nèi)容。
要使用文本文件中的信息,首先需要將信息讀取到內(nèi)存中。為此,你可以一次性讀取文件的全部內(nèi)容,也可以以每次一行的方式逐步讀取"
簡要說,數(shù)據(jù)很重要,存儲很重要,讀取使用全靠文件操作.

在這個程序中,第1行代碼做了大量的工作。我們先來看看函數(shù)open() 。要以任何方式使用文件——哪怕僅僅是打印其內(nèi)容,都得先打開 文件,這樣才能訪問它。函數(shù)open() 接受一個參數(shù):要打開的文件的名稱。Python在當(dāng)前執(zhí)行的文件所在的目錄中查找指定的文件。在這個示例中,當(dāng)前運行的是file_reader.py,因此Python在file_reader.py所在的目錄中 查找pi_digits.txt。函數(shù)open() 返回一個表示文件的對象。在這里,open('pi_digits.txt') 返回一個表示文件pi_digits.txt 的對象;Python將這個對象存儲在我們將 在后面使用的變量中。
關(guān)鍵字with 在不再需要訪問文件后將其關(guān)閉。
在這個程序中,注意到我們調(diào)用了open() ,但沒有調(diào)用close() ;你也可以調(diào)用open() 和close() 來打開和關(guān)閉文件,但 這樣做時,如果程序存在bug,導(dǎo)致close() 語句未執(zhí)行,文件將不會關(guān)閉。這看似微不足道,但未妥善地關(guān)閉文件可能會導(dǎo)致數(shù)據(jù)丟失或受損。如果在程序中過早地調(diào) 用close() ,你會發(fā)現(xiàn)需要使用文件時它已關(guān)閉 (無法訪問),這會導(dǎo)致更多的錯誤。并非在任何情況下都能輕松確定關(guān)閉文件的恰當(dāng)時機,但通過使用前面所示的結(jié)構(gòu),可 讓Python去確定:你只管打開文件,并在需要時使用它,Python自會在合適的時候自動將其關(guān)閉。
DAY 141 2017.10.21
課后作業(yè)10-11:喜歡的數(shù)字
編寫一個程序,提示用戶輸入他喜歡的數(shù)字,并使用 json.dump()將這個數(shù)字存儲到文件中。再編寫一個程序,從文件中讀取這個值,并打 印消息“I know your favorite number! It’s _.”。
課后作業(yè)10-12 記住喜歡的數(shù)字
將練習(xí) 10-11 中的兩個程序合而為一。如果存儲了用戶喜 歡的數(shù)字,就向用戶顯示它,否則提示用戶輸入他喜歡的數(shù)字并將其存儲到文件中。運 行這個程序兩次,看看它是否像預(yù)期的那樣工作。
# Hello World program in Python
# --coding: utf-8 --
import json
string="please enter your favorite number: "
Number=input(string.title())
filename='Favorite_number.json'
with open(filename,'w') as f_obj:
json.dump(int(Number),f_obj)
with open(filename) as f_obj:
User_number=json.load(f_obj)
print("I know your favorite number is "+str(User_number))

DAY 142 2017.10.22
10.1.2 文件路徑
當(dāng)你將類似pi_digits.txt這樣的簡單文件名傳遞給函數(shù)open() 時,Python將在當(dāng)前執(zhí)行的文件(即.py程序文件)所在的目錄中查找文件。
根據(jù)你組織文件的方式,有時可能要打開不在程序文件所屬目錄中的文件。例如,你可能將程序文件存儲在了文件夾python_work中,而在文件夾python_work中,有一個名為 text_files的文件夾,用于存儲程序文件操作的文本文件。雖然文件夾text_files包含在文件夾python_work中,但僅向open() 傳遞位于該文件夾中的文件的名稱也不可行,因為Python 只在文件夾python_work中查找,而不會在其子文件夾text_files中查找。要讓Python打開不與程序文件位于同一個目錄中的文件,需要提供文件路徑 ,它讓Python到系統(tǒng)的特定位置 去查找。
由于文件夾text_files位于文件夾python_work中,因此可使用相對文件路 徑來打開該文件夾中的文件。相對文件路徑讓Python到指定的位置去查找,而該位置是相對于當(dāng)前運行的程 序所在目錄的

file_path = './main.py'
with open(file_path) as file_object:
print file_object.read()
DAY 143-144 2017.10.23--2017.10.24
課后作業(yè)10-13 驗證用戶:最后一個 remember_me.py 版本
假設(shè)用戶要么已輸入其用戶名,要么是首次運行該程序。我們應(yīng)修改這個程序,以應(yīng)對這樣的情形:當(dāng)前和最后一次運行 該程序的用戶并非同一個人。 為此,在 greet_user()中打印歡迎用戶回來的消息前,先詢問他用戶名是否是對的。 如果不對,就調(diào)用 get_new_username()讓用戶輸入正確的用戶名。
# Hello World program in Python
# --coding: utf-8 --
import json
message='no message!'
def new_user():
NameJudge=raw_input('Please Enter Your Name :')
filename=NameJudge+'.json'
with open(filename,'w') as f_obj:
json.dump(NameJudge,f_obj)
def greet_user():
NameJudge=raw_input('Please Enter Your Load Name :')
filename=NameJudge+'.json'
try:
with open(filename) as f_obj:
User=json.load(f_obj)
except FileNotFoundError:
print(message)
else:
print('Welcome home, '+User)
judgment=raw_input("Do you have the Accounts ? Y/N\n")
if judgment.title()=='Y':
greet_user()
if judgment.title()=='N':
new_user()

DAY 145—146 2017.10.25—2017.10.26
在外旅游,偷懶中...
json模塊使用總結(jié)——Python
DAY 147 2017.10.27
10.1.3 逐行讀取-黑客讀取服務(wù)器密碼文件例子
使用關(guān)鍵字with 時,open() 返回的文件對象只在with 代碼塊內(nèi)可用。如果要在with 代碼塊外訪問文件的內(nèi)容,可在with 代碼塊內(nèi)將文件的各行存儲在一個列表中,并
在with 代碼塊外使用該列表:你可以立即處理文件的各個部分,也可推遲到程序后面再處理。 下面的示例在with 代碼塊中將文件pi_digits.txt的各行存儲在一個列表中,再在with 代碼塊外打印它們:

filename = '/etc/passwd'
with open(filename) as file_object:
for line in file_object:
print(line)