最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python3基礎(chǔ)之輸入和輸出實(shí)例分析

 更新時(shí)間:2014年08月18日 08:53:58   投稿:shichen2014  
這篇文章主要介紹了Python3基礎(chǔ)之輸入和輸出實(shí)例分析,很重要的知識(shí)點(diǎn),需要的朋友可以參考下

通常來(lái)說(shuō),一個(gè)Python程序可以從鍵盤讀取輸入,也可以從文件讀取輸入;而程序的結(jié)果可以輸出到屏幕上,也可以保存到文件中便于以后使用。本文就來(lái)介紹Python中最基本的I/O函數(shù)。

一、控制臺(tái)I/O

1.讀取鍵盤輸入

內(nèi)置函數(shù)input([prompt]),用于從標(biāo)準(zhǔn)輸入讀取一個(gè)行,并返回一個(gè)字符串(去掉結(jié)尾的換行符):

s = input("Enter your input:")

注:在Python 3.x版本中取消了 raw_input() 函數(shù)。

2.打印到屏幕

最簡(jiǎn)單的輸出方法是用print語(yǔ)句,你可以給它傳遞零個(gè)或多個(gè)用逗號(hào)隔開(kāi)的表達(dá)式:

print([object, ...][, sep=' '][, end='endline_character_here'][, file=redirect_to_here]) 

方括號(hào)內(nèi)是可選的,sep表示分割符,end表示結(jié)束符,file表示重定向文件。如果要給sep、end、file指定值必須使用關(guān)鍵字參數(shù)。

print('hello', 'world', sep='%')  # 輸出 hello%world 
print('hello', 'world', end='*')  # 輸出 hello world*,并且不換行 

二、文件I/O

讀寫(xiě)文件之前,先用open()函數(shù)打開(kāi)一個(gè)文件,它會(huì)返回一個(gè)文件對(duì)象(file object):

f = open(filename,mode)

如果不指定mode參數(shù),文件將默認(rèn)以‘r'模式打開(kāi)。模式中的字符有:

r:只讀
w:只寫(xiě),如果文件已存在則將其覆蓋。如果該文件不存在,創(chuàng)建新文件
+:讀寫(xiě)(不能單獨(dú)使用)
a:打開(kāi)文件用于追加,只寫(xiě),不存在則創(chuàng)建新文件
b:以二進(jìn)制模式打開(kāi)(不能單獨(dú)使用)

所以可能的模式大概有r、w、r+、w+、rb、wb、rb+、wb+、a、a+、ab、ab+,注意只有w和a可以創(chuàng)建文件。

通常情況下,文件都是以文本模式(text mode)打開(kāi)的,也就是說(shuō),從文件中讀寫(xiě)的是以一種特定的編碼格式進(jìn)行編碼(默認(rèn)的是 UTF-8)的字符串。如果文件以二進(jìn)制模式(binary mode)打開(kāi),數(shù)據(jù)將以字節(jié)對(duì)象的形式進(jìn)行讀寫(xiě):

f = open('a.txt','wb+') 
f.write('I like apple!')  # 報(bào)錯(cuò) 
f.write(b'I like apple!') # 以bytes對(duì)象的形式進(jìn)行讀寫(xiě) 

Bytes對(duì)象是0到127的不可修改的整數(shù)序列,或純粹的 ASCII 字符,它的用途是存儲(chǔ)二進(jìn)制數(shù)據(jù)。

可以通過(guò)在一個(gè)字符串前面加上'b'來(lái)創(chuàng)建一個(gè)bytes literal;
也可以通過(guò)bytes() 函數(shù)創(chuàng)建一個(gè) bytes 對(duì)象。

注意:如果bytes() 函數(shù)的初始化器是一個(gè)字符串,那么必須提供一種編碼。

b1 = b'This is string' 
b2 = bytes('This is string', 'UTF-8')  # 必須指定編碼格式 

字符串對(duì)象與字節(jié)對(duì)象是不兼容的,要將 bytes 轉(zhuǎn)變?yōu)?str, bytes 對(duì)象必須要進(jìn)行解碼,使用decode() 方法:

b = bytes('This is string', 'UTF-8') 
print(b, b.decode(), sep='\n') 
# 輸出: 
# b'This is string' 
# This is string 

文件對(duì)象的方法(假設(shè)f是一個(gè)文件對(duì)象):

f.read(size) :讀取size個(gè)字節(jié)的數(shù)據(jù),然后作為字符串或 bytes 對(duì)象返回。size是一個(gè)可選參數(shù),如果不指定size,則讀取文件的所有內(nèi)容。
f.readline() :讀取一行。在字符串末尾會(huì)留下?lián)Q行符 (\n),如果到文件尾,返回空字符串。
f.readlines() :讀取所有行,儲(chǔ)存在列表中,每個(gè)元素是一行,相當(dāng)于list(f)。
f.write(string) :將 string 寫(xiě)入到文件中,返回寫(xiě)入的字符數(shù)。如果以二進(jìn)制模式寫(xiě)文件,需要將string轉(zhuǎn)換為 bytes 對(duì)象。
f.tell() :返回文件對(duì)象當(dāng)前所處的位置,它是從文件開(kāi)頭開(kāi)始算起的字節(jié)數(shù)。
f.seek(offset, from_what) :改變文件對(duì)象所處的位置。offset是相對(duì)參考位置的偏移量,from_what 取值 0(文件頭, 默認(rèn))、1(當(dāng)前位置)、2(文件尾)表示參考位置。
f.close() :關(guān)閉文件對(duì)象。

這些都是很常用的方法,當(dāng)然文件對(duì)象不止這些方法。根據(jù)打開(kāi)的模式不同,open() 返回的文件對(duì)象類型也不同:

TextIOWrapper:文本模式,返回TextIOWrapper對(duì)象。
BufferedReader:讀二進(jìn)制,即rb,返回BufferedReader對(duì)象。
BufferedWriter:寫(xiě)和追加二進(jìn)制,即wb、ab,返回BufferedWriter對(duì)象。
BufferedRandom:讀/寫(xiě)模式,即含有+的模式,返回BufferedRandom對(duì)象。
可以在這些文件對(duì)象上運(yùn)行 dir() 或 help(),查看它們所有的方法。

補(bǔ)充:

1、在文本模式下,seek()方法只會(huì)相對(duì)于文件起始位置進(jìn)行定位。(除了定位文件尾可以用 seek(0, 2)之外)
2、可以循環(huán)迭代一個(gè)文件對(duì)象一行一行讀?。?/p>

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

三、格式化輸出

一般來(lái)說(shuō),我們希望更多的控制輸出格式,而不是簡(jiǎn)單的以空格分割。這里有兩種方式:

第一種是由你自己控制。使用字符串切片、連接操作以及 string 包含的一些有用的操作。
第二種是使用str.format()方法。
下面給一個(gè)示例:

# 第一種方式:自己控制 
for x in range(1, 11): 
  print(str(x).rjust(2), str(x*x).rjust(3), end=' ') 
  print(str(x*x*x).rjust(4)) 
 
# 第二種方式:str.format() 
for 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 729 
# 10 100 1000 

第一種方式中,字符串對(duì)象的 str.rjust() 方法的作用是將字符串靠右,并默認(rèn)在左邊填充空格,類似的方法還有 str.ljust() 和 str.center() 。這些方法并不會(huì)寫(xiě)任何東西,它們僅僅返回新的字符串,如果輸入很長(zhǎng),它們并不會(huì)截?cái)嘧址?。我們注意到,同樣是輸出一個(gè)平方與立方表,使用str.format()會(huì)方便很多。

str.format()的基本用法如下:

>>> print('We are the {} who say "{}!"'.format('knights', 'Ni')) 
We are the knights who say "Ni!" 

括號(hào)及括號(hào)里的字符將會(huì)被 format() 中的參數(shù)替換.。括號(hào)中的數(shù)字用于指定傳入對(duì)象的位置:

>>> print('{0} and {1}'.format('Kobe', 'James')) 
Kobe and James 
>>> print('{1} and {0}'.format('Kobe', 'James')) 
James and Kobe 

如果在 format() 中使用了關(guān)鍵字參數(shù),那么它們的值會(huì)指向使用該名字的參數(shù):

>>> print('The {thing} is {adj}.'.format(thing='flower', adj='beautiful')) 
The flower is beautiful. 

可選項(xiàng)':'和格式標(biāo)識(shí)符可以跟著 field name,這樣可以進(jìn)行更好的格式化:

>>> import math 
>>> print('The value of PI is {0:.3f}.'.format(math.pi)) 
The value of PI is 3.142. 

在':'后傳入一個(gè)整數(shù),可以保證該域至少有這么多的寬度,用于美化表格時(shí)很有用:

>>> table = {'Jack':4127, 'Rose':4098, 'Peter':7678} 
>>> for name, phone in table.items(): 
...   print('{0:10} ==> {1:10d}'.format(name, phone)) 
...  
Peter   ==>    7678 
Rose    ==>    4098 
Jack    ==>    4127 

我們還可以將參數(shù)解包進(jìn)行格式化輸出。例如,將table解包為關(guān)鍵字參數(shù):

table = {'Jack':4127, 'Rose':4098, 'Peter':7678} 
print('Jack is {Jack}, Rose is {Rose}, Peter is {Peter}.'.format(**table)) 
# 輸出:Jack is 4127, Rose is 4098, Peter is 7678. 

補(bǔ)充:

% 操作符也可以實(shí)現(xiàn)字符串格式化。它將左邊的參數(shù)作為類似 sprintf() 式的格式化字符串,而將右邊的代入:

import math 
print('The value of PI is %10.3f.' %math.pi) 
# 輸出:The value of PI is   3.142. 

因?yàn)檫@種舊式的格式化最終會(huì)從Python語(yǔ)言中移除,應(yīng)該更多的使用 str.format() 。

附:文本模式與二進(jìn)制模式

1、在Windows系統(tǒng)中,文本模式下,默認(rèn)是將Windows平臺(tái)的行末標(biāo)識(shí)符 \r\n 在讀時(shí)轉(zhuǎn)為 \n ,而在寫(xiě)時(shí)將 \n 轉(zhuǎn)為 \r\n 。 這種隱藏的行為對(duì)于文本文件是沒(méi)有問(wèn)題的,但是對(duì)于二進(jìn)制數(shù)據(jù)像 JPEG 或 EXE 是會(huì)出問(wèn)題的。在使用這些文件時(shí)請(qǐng)小心使用二進(jìn)制模式。

2、在類Unix/Linux系統(tǒng)中,行末標(biāo)識(shí)符為 \n,即文件以 \n 代表?yè)Q行。所以Unix/Linux系統(tǒng)中在文本模式和二進(jìn)制模式下并無(wú)區(qū)別。

本文所述實(shí)例讀者可以實(shí)際動(dòng)手操作測(cè)試一下,以加深印象,從而進(jìn)一步牢固掌握Python基礎(chǔ)。

相關(guān)文章

  • python利用selenium進(jìn)行瀏覽器爬蟲(chóng)

    python利用selenium進(jìn)行瀏覽器爬蟲(chóng)

    這篇文章主要介紹了python項(xiàng)目實(shí)戰(zhàn)之利用selenium進(jìn)行瀏覽器爬蟲(chóng),本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-04-04
  • 最新評(píng)論

    崇州市| 南阳市| 紫金县| 汶上县| 临潭县| 兰考县| 江孜县| 内丘县| 清苑县| 收藏| 永宁县| 玛纳斯县| 营山县| 大田县| 洞头县| 通州市| 宜都市| 儋州市| 老河口市| 松阳县| 达拉特旗| 疏勒县| 丽江市| 台安县| 威信县| 抚松县| 南平市| 徐水县| 崇阳县| 嘉鱼县| 城市| 长垣县| 大洼县| 兴安县| 泗洪县| 观塘区| 济宁市| 湘乡市| 汽车| 南汇区| 监利县|