天天看點

Python 輸入輸出

str和repr内置函數

在介紹Python的輸入輸出之前,我們先來介紹兩個内置函數,

str()

repr()

,它們都用來輸出對象的字元串形式。不過它們之間有一個重要差別,

repr()

主要輸出解釋器可以讀取的字元串形式,而

str()

輸出人類易讀的字元串形式。

當然雖然它們之間有差別,但是很多類型的

str()

repr()

形式完全相同。

print('--------------str函數--------------')

a_list = [1, 2, 3, 4, 5]
print(f'str():{str(a_list)}')

print('--------------repr函數--------------')
print(f'repr():{repr(a_list)}')
           

字元串格式化

format函數

介紹了内置函數之後,下面我們來介紹一下Python字元串格式化的方法。首先是位置參數的方式。我們需要調用字元串上面的

format()

函數,然後按照

{0}

這樣的順序将參數傳入。

print('--------------字元串格式化--------------')

name = 'yitian'
age = 24
sentence = '{0} is {1} years old'.format(name, age)
print(sentence)
           

當然也可以使用命名參數方式。這樣字元串中需要修改為

{name}

這樣的形式,

format

函數中也需要使用關鍵字參數方式傳值。

sentence = '{name} is {age} years old'.format(name=name, age=age)
print(sentence)
           

數字格式化

如果需要格式化數字,需要在字元串的占位符中添加冒号和格式化符号。要格式化的是浮點數,就用

:.3f

這樣的符号,小數點後面的數字代表要精确到的小數點後數位;要格式化的是正數,就是用

:5d

這樣的,d前面的數字表示前面要空的位數。如果使用命名參數的話把占位符數字改為參數名即可。

import math
print('PI is {0:.3f}'.format(math.pi))
print('100 is {integer:5d}'.format(integer=100))
           

結果如下。

PI is 3.142
100 is   100
           

格式化字元串

以前我也學了一點Python,不過就小小的入了個門。這次重新學習的時候,我第一件要了解的事情就是格式化字元串(formatted string),這個特性在C#、Kotlin等很多語言中都有,使用非常友善。

格式化字元串需要在字元串前面添加一個

f

,表示這是格式化字元串,這樣,字元串中就不需要占位符并調用

format()

方法了。我們可以将字元串和要插入的值寫在一起。Python會幫我們執行實際的字元串格式化操作。如果需要格式化符,隻要在花括号中插入冒号并在後面跟上即可。

print('--------------格式化字元串--------------')
print(f'PI is {math.pi:.4f}')
           

這種方式最友善。是以我在需要格式化字元串的地方都使用了這種方式。

舊式格式化

如果你學習過Python2.7 之類的舊Python版本,應該對下面的格式化方式很熟悉。

>>> import math
>>> print('The value of PI is approximately %5.3f.' % math.pi)
The value of PI is approximately 3.142.
           

不過由于這是一種舊的方式,可能在Python3中被移除。是以我們最好還是使用前面幾種。

終端輸入和輸出

終端輸入

終端輸入很簡單,使用

input()

函數即可。

input()

函數還可以接受一個提示字元串,在接受使用者輸入前會列印提示字元串,為使用者做一些提示。

input()

函數傳回的是輸入的字元串形式,即使輸入的是數字。是以如果輸入的是數字之類的資訊,我們需要進行轉換才能使用。

print('--------------終端輸入--------------')
input_string = input('Please input some words:')
print(input_string)
           

終端輸出

終端輸出其實不用介紹了,用的使我們到目前為止非常熟悉的一個函數

print()

print()

函數可以接受多個參數來輸出。如果需要對輸出形式進行控制,可以設定

print()

函數的

sep

end

參數。

sep

是多個輸出之間的分隔符,預設是一個空格。而

end

是輸出的結尾,預設是換行。

print('--------------終端輸出--------------')

print('這是一段輸出', '下一段輸出', sep=',', end='\n')
           

再舉一個例子,輸出九九乘法表。

{i*j:<5}

的作用是資料寬度為5,左邊不足的用空格補充。

print('--------------九九乘法表--------------')
for i in range(1, 10):
    for j in range(1, i + 1):
        print(f'{j}X{i}={i*j:<5}', end='')
    print()
           

結果是非常漂亮的三角形。

--------------九九乘法表--------------
1X1=1    
1X2=2    2X2=4    
1X3=3    2X3=6    3X3=9    
1X4=4    2X4=8    3X4=12   4X4=16   
1X5=5    2X5=10   3X5=15   4X5=20   5X5=25   
1X6=6    2X6=12   3X6=18   4X6=24   5X6=30   6X6=36   
1X7=7    2X7=14   3X7=21   4X7=28   5X7=35   6X7=42   7X7=49   
1X8=8    2X8=16   3X8=24   4X8=32   5X8=40   6X8=48   7X8=56   8X8=64   
1X9=9    2X9=18   3X9=27   4X9=36   5X9=45   6X9=54   7X9=63   8X9=72   9X9=81 
           

檔案讀寫

open内置函數

檔案讀取

最簡單的檔案讀寫方式就是

open(filename, mode)

内置函數了,

filename

參數指定要讀寫的檔案名,

mode

指定了檔案模式,模式可以是

w

(隻寫)、

r

(隻讀)、

a

(追加)、

r+

(讀寫)、

b

(二進制),預設是

r

下面的例子讀取了Windows作業系統下的hosts檔案。

print('--------------open内置函數--------------')

hosts_file=open(r'C:\Windows\System32\drivers\etc\hosts')

print(hosts_file.read())
           

f.read(size)

函數會傳回指定大小的檔案内容,如果檔案是文本模式(預設的),傳回的就是字元串;如果檔案是二進制模式(使用了模式

b

),那麼傳回的就是二進制對象。如果

size

未指定,就會傳回整個檔案内容。如果檔案比較大,使用該方法就需要格外注意了。

f.readline()

函數傳回檔案的一行,再次調用傳回下一行。如果傳回空行代表檔案已到末尾了。

還可以直接周遊檔案内容。這種方式很高效,因為每次隻讀了一行,是以即使是大檔案也可以順利讀取完畢。如果需要将檔案讀取為清單,可以使用

f.readlines()

函數。

>>> for line in f:
...     print(line, end='')
           

檔案用完之後需要調用

close()

方法關閉,也可以使用

with

語句自動關閉檔案。

with open('test.txt', 'w') as output:
    .........
    .........
           

檔案寫入

檔案寫入使用

write

函數即可。需要注意如果需要寫入一個新檔案,記得把模式修改為

w

,如果使用

r+

的話會提示檔案不存在。

下面這個例子将上面的hosts檔案内容儲存到另一個檔案中。

import os

with open('test.txt', 'w') as output:
    output.write('# This is a test file' + os.linesep)
    output.writelines(hosts_content)

           

下面是檔案寫入函數的簡單總結。

函數名 作用
write 寫入内容到檔案
writelines 寫入所有行到内容
seek 将遊标移動到指定位元組

json讀寫

json處理是一項非常常見的任務。說實話動态語言更适合處理json,因為json本來就是動态語言JavaScript的格式。相對來說,靜态語言處理json要麻煩一點,比如Java要處理json,首先需要編寫一個實體類,然後用類庫提供的注解将json的值與類的屬性對應起來。而動态語言就沒這麼麻煩,直接讀到對象中,然後使用就行了。

python标準庫中提供了json庫,可以非常友善的在python對象和json字元串之間進行轉換。json庫的使用也非常簡單,主要就4個函數:

dump

(輸出json到檔案)、

dumps

(輸出json到字元串)、

load

(從檔案加載對象)、

loads

(從字元串加載對象)。

print('--------------json--------------')

import json

string1 = json.dumps([1, 2, 3, 'fuck'])
print(f'string1:{string1}')

personal_info = {'name': 'yitian', 'age': 24, 'gender': 'male'}
string2 = json.dumps(personal_info)
print(f'string2:{string2 }')

json1 = json.loads('[1,2,3,4,"5"]')
print(f'json1:{json1}')
json2 = json.loads('[{"name":"yitian","age":24},{"name":"zhang3","age":25}]')
print(f'json2:{json2}')