程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Python零基礎入門-7 輸入與輸出

編輯:Python

7. 輸入與輸出

7.1 更復雜的輸出格式

用print()函數可以輸出字符串到屏幕。對於輸出的字符串,我們很多方法控制字符串的格式,如果你的python版本>=3.6,那麼強烈推薦f字符串(f-string)。

f-字符串(f-string)

基礎使用:

f'something{var}'

在普通字符串開頭加上f,然後字符串內部 可以用{var}標記,{var}會被替換成變量的值。

year = 2016
event = 'Referendum'
f'Results of the {
year} {
event}'
#'Results of the 2016 Referendum'

在{}內的變量後添加格式說明符。

f'{變量:格式說明符號}'

格式說明符內容非常多,下面只舉幾個常見的例子,更多細節見本文附錄。

:.長度f控制浮點數小數點後面位數:

n = 1.23456
f'{
n:.2f}'' # 小數點後2位
#1.23

':長度' 為該字段設置最小字符寬度,常用於列對齊:

table = {
'Sjoerd': 4127, 'Jack': 4098, 'Dcab': 7678}
for name, phone in table.items():
print(f'{
name:10} ==> {
phone:10}')

詳細的格式控制符在文檔-Python標准庫-文本處理服務-string中:string — 常見的字符串操作 — Python 3.10.4 文檔

文章最後的附錄摘取了部分說明。

repr與str

使用用 repr() 或 str() 函數可以值轉化為字符串。

str() 函數返回供人閱讀的值,repr() 則生成適於解釋器讀取的值。

如果沒有對於沒有支持供人閱讀展示結果的對象, str() 返回與 repr() 相同的值。

一般情況下,數字、列表或字典等結構的值,使用這兩個函數輸出的表現形式是一樣的。

字符串有兩種不同的表現形式。

#先劇透一下,這兩種方法實際上調用的是對象的__repr____str__方法(後面類裡再說)。

實現對齊

str.rjust(width) 方法在左側填充空格,保證指定寬度,實現對齊。

類似的還有str.ljust(width) 和str.center(width)

for x in range(1, 11):
print(repr(x).rjust(2), repr(x*x).rjust(3), end=' ')
# Note use of 'end' on previous line
print(repr(x*x*x).rjust(4))

這些方法不寫入任何內容,只返回一個新字符串,如果輸入的字符串太長,它們不會截斷字符串,而是原樣返回。

其它格式化字符串方法

  • % 運算符(求余符)

    % 運算符也可用於字符串格式化。給定 'string' % values,則 string 中的 % 實例會以零個或多個 values 元素替換。此操作被稱為字符串插值。例如:

  • str.format() f-字符串已經實現了它的功能,不再多說。

    print('We are the {} who say "{}!"'.format('knights', 'Ni'))
    #輸出: We are the knights who say "Ni!"
    

7.2 讀寫文件

我們首先要獲取文件對象,然後調用文件對象的讀寫方法,最後關閉文件對象。

獲取文件對象

open()方法返回一個文件對象(用於讀寫)。通常使用

open(filename, mode, encoding=None)來調用該方法,如:

f = open('workfile', 'w', encoding="utf-8")

第一個參數是文件名。第二個參數是打開方式,''w‘表示寫入模式,‘r’’表示讀取模式,'a’表示追加模式,'r+'表示讀寫模式,‘b’表示二進制格式。mode默認值為’r’。

我們通常讀寫的是文本文件,文本文件有一些不同的編碼格式(encoding)。如果沒有指定,默認值是所在操作系統默認編碼。由於UTF-8是目前標准的編碼格式,所以一般設置

encoding=“utf-8”。

在處理文件時,一般使用with關鍵字,可以自動關閉文件。

否則需要使用f.close()來手動關閉,釋放文件資源。

with open('workfile', encoding="utf-8") as f:
read_data = f.read()
# with 塊結束後文件會被自動關閉
f.closed

文件對象的方法

假設已經有了文件對象f。

  • f.read(size) 取文件內容,返回字符串。size可選表示最多讀取字符數,不寫時默認讀取整個文件。

  • f.readline() 從文件單行數據,字符串末尾保留換行符。f.readline() 返回空字符串,就表示已經到達了文件末尾,空行使用 '\n' 表示,該字符串只包含一個換行符。

  • f.readlines() 如需以列表形式取文件中的所有行,可以用 list(f) 或 f.readlines()

從文件中讀取多行時,可以用循環遍歷整個文件對象。這種操作能高效利用內存,快速,且代碼簡單:

for line in f:
print(line, end='')
  • f.write(string) 把 string 的內容入文件,並返回寫入的字符數。

  • f.tell() 返回整數,給出文件對象在文件中的當前位置,表示為二進制模式下時從文件開始的字節數,以及文本模式下的意義不明的數字。

  • f.seek(offset, whence) 可以改變文件對象的位置。通過向參考點添加 offset 計算位置;參考點由 whence 參數指定。 whence 值為 0 時,表示從文件開頭計算,1 表示使用當前文件位置,2 表示使用文件末尾作為參考點。省略 whence 時,其默認值為 0,即使用文件開頭作為參考點。

使用json保存結構化數據

json全稱是JavaScript Object Notation(JavaScript 對象表示法)。類似字典格式:

{

"sites": [
{
 "name":"菜鳥教程" , "url":"www.runoob.com" },
{
 "name":"google" , "url":"www.google.com" },
{
 "name":"微博" , "url":"www.weibo.com" }
]
}

json 標准模塊采用 Python 數據層次結構,並將之轉換為字符串表示形式;這個過程稱為 serializing (序列化)。從字符串表示中重建數據稱為 deserializing (解序化)。

import json
x = [1, 'simple', 'list']
json.dumps(x)

如果f是文件對象,可以用下面方法在文件中讀寫json格式數據。(當然,f是用with open…打開的)

json.dump(x, f) # 序列化為json格式
x = json.load(f) # 轉為python字典格式

附錄:格式說明符(format_spec):

format_spec ::= [[fill]align][sign][#][0][width][grouping_option][.precision][type]
fill ::= <any character>
align ::= "<" | ">" | "=" | "^"
sign ::= "+" | "-" | " "
width ::= digit+
grouping_option ::= "_" | ","
precision ::= digit+
type ::= "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"

說明:

fill 是填充字符

align是對齊方式

sign是數字符號(±)

'#' 選項可讓“替代形式”被用於執行轉換。 替代形式會針對不同的類型分別定義。 此選項僅適用於整數、浮點數和復數類型。 對於整數類型,當使用二進制、八進制或十六進制輸出時,此選項會為輸出值分別添加相應的 '0b''0o''0x' 或 '0X' 前綴。 對於浮點數和復數類型,替代形式會使得轉換結果總是包含小數點符號,即使其不帶小數部分。 通常只有在帶有小數部分的情況下,此類轉換的結果中才會出現小數點符號。 此外,對於 'g' 和 'G' 轉換,末尾的零不會從結果中被移除。

width 是一個定義最小總字段寬度的十進制整數,包括任何前綴、分隔符和其他格式化字符。 如果未指定,則字段寬度將由內容確定。

當未顯式給出對齊方式時,在 width 字段前加一個零 ('0') 字段將為數字類型啟用感知正負號的零填充。 這相當於設置 fill 字符為 '0' 且 alignment 類型為 '='

grouping_option中',' 選項表示使用逗號作為千位分隔符。 對於感應區域設置的分隔符,請改用 'n' 整數表示類型。

'_' 選項表示對浮點表示類型和整數表示類型 'd' 使用下劃線作為千位分隔符。 對於整數表示類型 'b''o''x' 和 'X',將為每 4 個數位插入一個下劃線。 對於其他表示類型指定此選項則將導致錯誤。

.precision,精度‎‎是一個十進制整數,對f'``F指示應在小數點後顯示多少位數字,對於g``G類型,指示小數點之前和之後顯示多少位數字。

對於字符串表示類型,該字段指示最大字段大小 - 換句話說,最多字符數。整數表示類型不允許使用‎‎精度‎‎。‎

type 確定了數據應如何呈現(例如進制)。


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved