&【16】Python 輸入輸出


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}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM