1 格式化輸出
Python 輸出值的方式有兩種:表達式語句和 print 函數(文件對象的輸出使用 write 方法,標准文件輸出可以參考 sys.stdout ,詳細文檔)。
如果我們想要將輸出的值轉成字符串,可以使用 repr() 或 str() 函數來實現,其中 repr() 函數產生一個解釋器易讀的表達形式,str() 函數返回一個用戶易讀的表達形式。
如果我們不只是想打印使用空格分隔的值,而是想對輸出進行格式化控制,可以采用兩種方式:一種是自己處理整個字符串,另一種是采用 str.format() 方式,下面介紹下 str.format() 的使用。
1)基本使用
print('{}網址: "{}!"'.format('Python技術', 'www.justdopython.com'))
# 輸出 Python技術網址: "www.justdopython.com!"
括號及其里面的字符 (稱作格式化字段) 將會被 format() 中的參數替換
2)在括號中的數字用於指向傳入對象在 format() 中的位置
print('{0} 和 {1}'.format('Hello', 'Python')) # 輸出 Hello 和 Python
print('{0} {1}'.format('Hello', 'Python')) # 輸出 Hello Python
print('{1} {0}'.format('Hello', 'Python')) # 輸出 Python Hello
3)如果在 format() 中使用了關鍵字參數,那么它們的值會指向使用該名字的參數
print('{name}網址: {site}'.format(name='Python技術', site='www.justdopython.com'))
# 輸出 Python技術網址: www.justdopython.com
4)位置及關鍵字參數可以任意的結合
print('電商網站 {0}, {1}, {other}。'.format('淘寶', '京東', other='拼多多'))
# 輸出 電商網站 淘寶, 京東, 拼多多。
5)!a (使用 ascii()), !s (使用 str()) 和 !r (使用 repr()) 可以用於在格式化某個值之前對其進行轉化:
print("repr() : {!s}; str() : {!r}; ascii() : {!a};".format('t1', 't2','t3'))
# 輸出 repr() : t1; str() : 't2'; ascii() : 't3';
6)字段名后允許可選的 : 和格式指令
# 將 PI 轉為三位精度
import math
print(math.pi)
# 輸出 3.141592653589793
print('The value of PI is approximately {0:.3f}.'.format(math.pi))
# 輸出 The value of PI is approximately 3.142.
7)在字段后的 : 后面加一個整數會限定該字段的最小寬度
table = {'Sjoerd': 123, 'Jack': 456, 'Dcab': 789}
for name, phone in table.items():
print('{0:10} ==> {1:10d}'.format(name, phone))
8)如果有個很長的格式化字符串,不想分割它可以傳入一個字典,用中括號( [] )訪問它的鍵;
table = {'Sjoerd': 123, 'Jack': 456, 'Dcab': 789}
print('Jack: {0[Jack]:d}; Sjoerd: {0[Sjoerd]:d}; ' 'Dcab: {0[Dcab]:d}'.format(table))
# 輸出 Jack: 456; Sjoerd: 123; Dcab: 789
還可以用 ** 標志將這個字典以關鍵字參數的方式傳入。
table = {'Sjoerd': 123, 'Jack': 456, 'Dcab': 789}
print('Jack: {Jack:d}; Sjoerd: {Sjoerd:d}; Dcab: {Dcab:d}'.format(**table))
# 輸出 Jack: 456; Sjoerd: 123; Dcab: 789
2 讀取鍵盤輸入
Python 提供了 input() 內置函數從標准輸入讀入一行文本,默認的標准輸入是鍵盤,input() 可以接收一個 Python 表達式作為輸入,並將運算結果返回。示例如下:
str = input("請輸入:");
print ("輸入的內容是: ", str)
# 請輸入:Hello Python
# 你輸入的內容是: Hello Python
3 文件讀寫
函數 open() 返回文件對象,通常的用法需要兩個參數:open(filename, mode)。
第一個參數 filename 是要訪問的文件名
第二個參數 mode 是描述如何使用該文件(可取值主要包括:r
讀取文件;w
只是寫入文件,已經存在的同名文件將被刪掉;a
打開文件進行追加,自動添加到末尾;r+
打開文件進行讀取和寫入;rb+
以二進制格式打開一個文件用於讀寫…),mode 參數是可選的,默認為 r
。
3.1 文件對象方法
- read()
要讀取文件內容,調用 read(size) ,size為可選參數。
f = open('tmp.txt', 'r')
str = f.read(5)
print(str)
f.close()
- readline()
讀取一行,換行符為 \n 。
f = open('tmp.txt', 'r')
str = f.readline()
print(str)
f.close()
- readlines()
讀取文件中包含的所有行,可設置可選參數 size 。
f = open('tmp.txt', 'r')
str = f.readlines()
print(str)
str = f.readlines(2)
print(str)
f.close()
- write()
write(string) 將 string 的內容寫入文件。
f = open('tmp.txt', 'w')
num = f.write('Hello Python')
print(num)
f.close()
- seek()
seek(offset, from_what) 改變文件當前的位置。offset 移動距離;from_what 起始位置,0 表示開頭,1 表示當前位置,2 表示結尾,默認值為 0 ,即開頭。
f = open('tmp.txt', 'rb+')
f.write(b'0123456789abcdef')
# 移動到文件的第 6 個字節
f.seek(5)
print(f.read())
# 移動到文件的第 7 個字節
f.seek(6)
print(f.read())
上面代碼執行后 temp.txt 如下:
0123456789abcdef
- tell()
tell() 返回文件對象當前所處的位置,它是從文件開頭開始算起的字節數。
f = open('tmp.txt', 'r')
f.seek(5)
print(f.tell())
# 輸出 5
- close()
當你處理完一個文件后,調用 close() 來關閉文件並釋放系統的資源。也可以使用 with 關鍵字處理文件對象,實現文件用完后自動關閉。
with open('tmp.txt', 'r') as f:
read_data = f.read()
print(f.closed)
# 輸出 True
3.2 操作 json 格式數據
- json.dumps(obj) 序列化,obj 轉換為 json 格式的字符串;
- json.dump(obj, fp) 序列化,將 obj 轉換為 json 格式的字符串,將字符串寫入文件;
- json.loads(str) 反序列化,將 json 格式的字符串反序列化為一個 Python 對象;
- json.load(fp) 反序列化,從文件中讀取含 json 格式的數據,將之反序列化為一個 Python 對象。
import json
data = {'id': '1', 'name': 'jhon', 'age': 12}
with open('t.json', 'w') as f:
json.dump(data, f)
上面代碼執行后 t.json 如下:
{"id": "1", "name": "jhon", "age": 12}
import json
with open("t.json", 'r') as f:
d = json.load(f)
print(d)
# 輸出 {'id': '1', 'name': 'jhon', 'age': 12}