標籤:python
輸出格式美化
Python兩種輸出值得方式:運算式語句和print()函數(第三種方式是使用檔案對象的write()方法 標準輸出檔案可以用sys.stdout引用)
如果你希望輸出對的形式更加多樣,可以使用str.format()函數來格式化輸出值
如果你希望將輸出的值轉成字串,可以使用repr()或str()函數來實現。
str()函數返回一個使用者易讀的表達形式。
repr()產生一個解譯器易讀的表達形式。
如
s = ‘Hello,world.‘str(s)>>>‘Hello,world.‘repr(s)>>>"‘Hello,world.‘"str(1/7)>>>‘0.14285714285714285‘x = 10*3.25y = 200*200s = ‘The value of x is ‘ + repr(x) + ‘, and y is ‘ + repr(y) + ‘...‘print(s)The value of x is 32.5, and y is 40000...hello = ‘hello,world\n‘hellos = repr(hello)print(hellos)>>>‘hello,world‘
輸出平方 立方表
#rjust()方法可以將字串靠右,並在左邊填充空格。for i in range(1,11): print(repr(x).rjust(2),repr(x*x),rjust(3),end=‘ ‘) print(repr(x*x*x).rjust(4))>>>1 1 1 2 4 8 3 9 27 4 16 64 5 25 125 6 36 216 7 49 343 8 64 512 9 81 72910 100 1000for x in range(1,11): print(‘{0:2d} {1:3d} {2:4d}‘.format(x,x*x,x*x*x))>>>1 1 1 2 4 8 3 9 27 4 16 64 5 25 125 6 36 216 7 49 343 8 64 512 9 81 72910 100 1000
str.format()用法:
{}及裡面的字元會被format()中的參數替換。在括弧中的數字用於指向傳入對象在format()中的位置
如
>>> print(‘{0} and {1}‘.format(‘spam‘, ‘eggs‘))spam and eggs>>> print(‘{1} and {0}‘.format(‘spam‘, ‘eggs‘))eggs and spam
如果在format()中使用了關鍵字函數,那麼它們 的值會指向使用該名字的參數
>>> print(‘This {food} is {adjective}.‘.format(... food=‘spam‘, adjective=‘absolutely horrible‘))This spam is absolutely horrible.
位置以及關鍵字參數可以任意的結合
>> print(‘The story of {0}, {1}, and {other}.‘.format(‘Bill‘, ‘Manfred‘, other=‘Georg‘))The story of Bill, Manfred, and Georg.
‘!a’ (使用 ascii()), ‘!s’ (使用 str()) 和 ‘!r’ (使用 repr()) 可以用於在格式化某個值之前對其進行轉化:
>>> import math>>> print(‘The value of PI is approximately {}.‘.format(math.pi))The value of PI is approximately 3.14159265359.>>> print(‘The value of PI is approximately {!r}.‘.format(math.pi))The value of PI is approximately 3.141592653589793.
可選項”:”和格式標識符可以跟著欄位名。這就允許對值進行更好的格式化。下面的例子將Pi保留到小數點後三位:
import mathprint(‘{0:3f}‘.format(math.pi))>>>3.142
在’:’後傳入一個整數,可以保證該域至少有這麼多的寬度,用於美化表格時很有用。
如果你有一個很長的格式化字串, 而你不想將它們分開, 那麼在格式化時通過變數名而非位置會是很好的事情。
最簡單的就是傳入一個字典, 然後使用方括弧 ‘[]’ 來訪問索引值 :
>>> table = {‘Sjoerd‘: 4127, ‘Jack‘: 4098, ‘Dcab‘: 8637678}>>> print(‘Jack: {0[Jack]:d}; Sjoerd: {0[Sjoerd]:d}; ‘ ‘Dcab: {0[Dcab]:d}‘.format(table))Jack: 4098; Sjoerd: 4127; Dcab: 8637678
也可以通過在 table 變數前使用 ‘**’ 來實現相同的功能:
>>> table = {‘Sjoerd‘: 4127, ‘Jack‘: 4098, ‘Dcab‘: 8637678}>>> print(‘Jack: {Jack:d}; Sjoerd: {Sjoerd:d}; Dcab: {Dcab:d}‘.format(**table))Jack: 4098; Sjoerd: 4127; Dcab: 8637678
舊式字串格式化
>>> import math>>> print(‘The value of PI is approximately %5.3f.‘ % math.pi)The value of PI is approximately 3.142.
讀和寫檔案
open()將會返回一個file對象,基本文法格式如下
open(filename,mode)
如
f = open(‘/tmp/workfile’,’w’)
第一個參數使要開啟的檔案名稱
第二個參數描述檔案如何使用的字元。mode可以使’r’如果檔案唯讀。’w’只用於寫(如果存在同名檔案則將被刪除)。’a’用於追加檔案內容。所寫的任何資料都會被自動增加到末尾.’r+’同時用於讀寫.
mode參數是可選的,’r’是預設值
檔案對象的方法f.read()
為了讀取一個檔案的內容,調用f.read(size).
將讀取一定數目的資料,然後作為字串或位元組對象返回.
size是一個可選的數字類型的參數.當size被忽略或者為負,那麼該檔案的所有內容都將被讀取並且返回.
f.read()>>>‘This is the entire file.\n‘
f.readline()
讀取單獨一行.如果返回Null 字元串說明已經讀到最後一行
>>> f.readline()‘This is the first line of the file.\n‘>>> f.readline()‘Second line of the file\n‘>>> f.readline()‘‘
f.readlines()
返回該檔案中所有的行
>>> f.readlines()[‘This is the first line of the file.\n‘, ‘Second line of the file\n‘]
另一種方式是迭代一個檔案對象然後讀取每行:
>>> for line in f:... print(line, end=‘‘)...This is the first line of the file.Second line of the file
這個方法很簡單, 但是並沒有提供一個很好的控制。 因為兩者的處理機制不同, 最好不要混用。
f.write()
f.write(string)將string寫入到檔案中,然後返回寫入的字元數
f.write(‘This is a test\n‘)>>>15
如果寫入的不是字串,需要先轉換
>>> value = (‘the answer‘, 42)>>> s = str(value)>>> f.write(s)18
f.close()
在處理完一個檔案後,調用f.close()來關閉檔案並釋放系統的資源,如果嘗試再調用該檔案,則會拋出異常
也可以使用with語句.結束後會協助你正確的關閉檔案,寫起來也比try finally簡短
with open(‘/tmp/workfile‘,‘r‘) as f: read_data = f.read()f.closed>>>True
pickle 模組
python的pickle模組實現了基本的資料序列和還原序列化。
通過pickle模組的序列化操作我們能夠將程式中啟動並執行對象資訊儲存到檔案中去,永久儲存.
通過pickle模組的還原序列化操作我們能夠從檔案中建立上一次程式儲存的對象.
基本介面:
pickle.dump(obj,file,[,protocol])
有了pickle這個對象,就能對file以讀取的形式開啟:
x = pickle.load(file)#從file中讀取一個字串,並將它重構為原來的python對象
file:類檔案對象,有read()和readline()介面
執行個體1:
#使用pickle模組將資料對象儲存到檔案import pickledata1 = {‘a‘:[1,2.0,3,4+6j], ‘b‘:(‘string‘,u‘Unicode string‘) ‘c‘:None}selfref_list = [1,2,3]selfref_list.append(selfref_list)output = open(‘data.pk1‘,‘wb‘)pickle.dump(data1,output)pickle.dump(selfref_list,output,-1)output.close()
執行個體2:
import pprint,picklepkl_file = open(‘data.pk1‘,‘rb‘)data1 = pickle.load(pk1_file)pprint.pprint(data1)data2 = pickle.load(pk1_file)pprint.pprint(data2)pkl_file.close()
【Python】 Python輸入和輸出