Python中輸入和輸出__Python

來源:互聯網
上載者:User
一、標準輸入輸出 1、列印到螢幕

產生輸出的最簡單方法是使用print語句,可以通過用逗號分隔零個或多個運算式。這個函數傳遞運算式轉換為一個字串,如下結果寫到標準輸出 -

print ("Python is really a great language,", "isn't it?")

這將產生以下結果標準螢幕上 :

Python is really a great language, isn't it?
2、讀取鍵盤輸入

Python2中有兩個內建的函數可從標準輸入讀取資料,它預設來自鍵盤。這些函數分別是:input() 和 raw_input()。
但在Python3中,raw_input()函數已被棄用。此外, input() 函數是從鍵盤作為字串讀取資料,不論是否使用引號(”或“”)。
樣本:

x=input("請輸入x=")y=input("請輸入y=")z=x+yprint("x+y="+z)

運行結果:

請輸入x=111請輸入y=222x+y=111222

可以看到input的傳回值永遠是字串,當我們需要返回int型時需要使用int(input())的形式,例如:

x=int(input("請輸入x="))y=int(input("請輸入y="))z=x+yprint("x+y=",z)

運行結果如下:

請輸入x=111請輸入y=222x+y= 333
3、格式化輸出

一般來說,我們希望更多的控制輸出格式,而不是簡單的以空格分割。這裡有兩種方式:
第一種是由你自己控制。使用字串切片、串連操作以及 string 包含的一些有用的操作。
樣本:

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

第一種方式中,字串對象的 str.rjust() 方法的作用是將字串靠右,並預設在左邊填充空格,所佔長度由參數指定,類似的方法還有 str.ljust() 和 str.center() 。這些方法並不會寫任何東西,它們僅僅返回新的字串,如果輸入很長,它們並不會截斷字串。
第二種是使用str.format()方法。
用法:它通過{}和:來代替傳統%方式 使用位置參數

要點:從以下例子可以看出位置參數不受順序約束,且可以為{},只要format裡有相對應的參數值即可,參數索引從0開,傳入位置參數列表可用*列表的形式。

>>> li = ['hoho',18]>>> 'my name is {} ,age {}'.format('hoho',18)'my name is hoho ,age 18'>>> 'my name is {1} ,age {0}'.format(10,'hoho')'my name is hoho ,age 10'>>> 'my name is {1} ,age {0} {1}'.format(10,'hoho')'my name is hoho ,age 10 hoho'>>> 'my name is {} ,age {}'.format(*li)'my name is hoho ,age 18'
使用關鍵字參數

要點:關鍵字參數值要對得上,可用字典當關鍵字參數傳入值,字典前加**即可

>>> hash = {'name':'hoho','age':18}>>> 'my name is {name},age is {age}'.format(name='hoho',age=19)'my name is hoho,age is 19'>>> 'my name is {name},age is {age}'.format(**hash)'my name is hoho,age is 18'
填充與格式化

格式:{0:[填充字元][對齊 <^>][寬度]}.format()

>>> '{0:*>10}'.format(20)  ##靠右對齊'********20'>>> '{0:*<10}'.format(20)  ##靠左對齊'20********'>>> '{0:*^10}'.format(20)  ##置中對齊'****20****'
精度與進位
>>> '{0:.2f}'.format(1/3)'0.33'>>> '{0:b}'.format(10)    #二進位'1010'>>> '{0:o}'.format(10)     #八進位'12'>>> '{0:x}'.format(10)     #16進位'a'>>> '{:,}'.format(12369132698)  #千分位格式化'12,369,132,698'
使用索引
>>> li['hoho', 18]>>> 'name is {0[0]} age is {0[1]}'.format(li)'name is hoho age is 18
二、檔案IO

Python提供了基本的功能和必要的預設操作檔案的方法。使用一個 file 對象來做大部分的檔案操作。 1、open 函數

在讀取或寫入一個檔案之前,你必須使用 Python 內建open()函數來開啟它。 該函數建立一個檔案對象,這將被用來調用與它相關的其他支援方式。
文法:

file object = open(file_name [, access_mode][, buffering])

下面是參數的詳細資料:
file_name: 檔案名稱(file_name )參數是包含您要訪問的檔案名稱的字串值。
access_mode: access_mode指定該檔案已被開啟,即讀,寫,追加等方式。可能值的完整列表,在表中如下。這是可選的參數,預設檔案訪問模式是讀(r)。

buffering: 如果該緩衝值被設定為0,則表示不使用緩衝。如果該緩衝值是1,則在訪問一個檔案進行時行緩衝。如果指定緩衝值大於1的整數,緩衝使用所指示的緩衝器大小進行。如果是負數,緩衝區大小是系統預設的(預設行為)。

通常,檔案以文本的形式開啟,這意味著,你從檔案讀出和向檔案寫入的字串會被特定的編碼方式(預設是UTF-8)編碼。
模式後面可以追加參數 ‘b’ 表示以二進位模式開啟檔案:資料會以位元組對象的形式讀出和寫入。這種模式應該用於所有不包含文本的檔案。在文字模式下,讀取時預設會將平台有關的行結束符(Unix上是 \n , Windows上是 \r\n)轉換為 \n。在文字模式下寫入時,預設會將出現的 \n 轉換成平台有關的行結束符。這種暗地裡的修改對 ASCII 文字檔沒有問題,但會損壞 JPEG 或 EXE 這樣的二進位檔案中的資料。使用二進位模式讀寫此類檔案時要特別小心。 2、file 對象屬性

一旦檔案被開啟,則就會有一個檔案對象,你就可以得到有關該檔案的各種資訊。
file.closed:如果檔案被關閉返回true,否則為false
file.mode :返迴文件開啟訪問模式
file.name :返迴文件名

測試:

# Open a filefo = open("foo.txt", "wb")print ("Name of the file: ", fo.name)print ("Closed or not : ", fo.closed)print ("Opening mode : ", fo.mode)fo.close()print ("Closed or not : ", fo.closed)

運行結果:

Name of the file:  foo.txtClosed or not :  FalseOpening mode :  wbClosed or not :  True
3、file對象的方法

假設已經建立了一個稱為 f 的檔案對象。 f.read()

為了讀取一個檔案的內容,調用 f.read(size), 這將讀取一定數目的資料, 然後作為字串或位元組對象返回。
size 是一個可選的數字類型的參數。 當 size 被忽略了或者為負, 那麼該檔案的所有內容都將被讀取並且返回。
以下執行個體假定檔案 foo.txt 已存在且內容如下:

Hello World。Hello Python。

代碼如下:

# 開啟一個檔案f = open("foo.txt", "r",encoding= 'UTF-8')str = f.read()print(str)# 關閉開啟的檔案f.close()

執行以上程式,輸出結果為:

Hello World。Hello Python。
f.readline()

f.readline() 會從檔案中讀取單獨的一行。分行符號為 ‘\n’。f.readline() 如果返回一個Null 字元串, 說明已經已經讀取到最後一行。

# 開啟一個檔案f = open("foo.txt", "r",encoding= 'UTF-8')str = f.readline()print(str)# 關閉開啟的檔案f.close()

執行以上程式,輸出結果為:

Hello World。
f.readlines()

f.readlines() 將返回該檔案中包含的所有行。
如果設定選擇性參數 sizehint, 則讀取指定長度的位元組, 並且將這些位元組按行分割。

# 開啟一個檔案f = open("foo.txt", "r",encoding= 'UTF-8')str = f.readlines()print(str)# 關閉開啟的檔案f.close()

執行以上程式,輸出結果為:

['Hello World。\n', 'Hello Python。']

另一種方式是迭代一個檔案對象然後讀取每行:

# 開啟一個檔案f = open("foo.txt", "r",encoding="UTF-8")for line in f:    print(line, end='')# 關閉開啟的檔案f.close()

執行以上程式,輸出結果為:

Hello World。Hello Python。

這個方法很簡單, 但是並沒有提供一個很好的控制。 因為兩者的處理機制不同, 最好不要混用。 f.write()

f.write(string) 將 string 寫入到檔案中, 然後返回寫入的字元數。

# 開啟一個檔案f = open("foo.txt", "w",encoding="UTF-8")num = f.write( "Python 是一個非常好的語言。\n是的,的確非常好!!\n" )print(num)# 關閉開啟的檔案f.close()

執行以上程式,輸出結果為:

29

開啟foo.txt其內容如下:

Python 是一個非常好的語言。是的,的確非常好!!

如果要寫入一些不是字串的東西, 那麼將需要先進行轉換:

# 開啟一個檔案f = open("foo.txt", "w",encoding="UTF-8")value = ('www.baidu.com', 666)s = str(value)f.write(s)# 關閉開啟的檔案f.close()

執行以上程式,開啟 foo.txt 檔案:

('www.baidu.com', 666)
f.tell()

f.tell() 返迴文件對象當前所處的位置, 它是從檔案開頭開始算起的位元組數。 f.seek()

如果要改變檔案當前的位置, 可以使用 f.seek(offset, from_what) 函數。
from_what 的值, 如果是 0 表示開頭, 如果是 1 表示當前位置, 2 表示檔案的結尾,例如:
seek(x,0) : 從起始位置即檔案首行首字元開始移動 x 個字元
seek(x,1) : 表示從當前位置往後移動x個字元
seek(-x,2):表示從檔案的結尾往前移動x個字元
from_what 值為預設為0,即檔案開頭。下面給出一個完整的例子:

>>> f = open('foo.txt', 'rb+')>>> f.write(b'0123456789abcdef')16>>> f.seek(5)     # 移動到檔案的第六個位元組5>>> f.read(1)b'5'>>> f.seek(-3, 2) # 移動到檔案的倒數第三位元組13>>> f.read(1)b'd'

在文字檔中 (那些開啟檔案的模式下沒有 b 的), 只會相對於檔案起始位置進行定位。
當你處理完一個檔案後, 調用 f.close() 來關閉檔案並釋放系統的資源,如果嘗試再調用該檔案,則會拋出異常。

>>> f.close()>>> f.read()Traceback (most recent call last):  File "<stdin>", line 1, in ?ValueError: I/O operation on closed file

當處理一個檔案對象時, 使用 with 關鍵字是非常好的方式。在結束後, 它會幫你正確的關閉檔案。 而且寫起來也比 try - finally 語句塊要簡短:

>>> with open('/tmp/foo.txt', 'r') as f:...     read_data = f.read()>>> f.closedTrue
4、使用 json 儲存結構化資料

從檔案中讀寫字串很容易。數值就要多費點兒周折,因為 read() 方法只會返回字串,應將其傳入 int() 這樣的函數,就可以將 ‘123’ 這樣的字串轉換為對應的數值 123。當你想要儲存更為複雜的資料類型,例如嵌套的列表和字典,手工解析和序列化它們將變得更複雜。
Python 允許你使用常用的資料交換格式 JSON(JavaScript Object Notation)。標準模組 json 可以接受 Python 資料結構,並將它們轉換為字串表示形式;此過程稱為 序列化。從字串表示形式重新構建資料結構稱為 還原序列化。序列化和還原序列化的過程中,表示該對象的字串可以儲存在檔案或資料中,也可以通過網路連接傳送給遠端機器。
如果你有一個對象 x,你可以用簡單的一行代碼查看其 JSON 字串表示形式:

>>> json.dumps([1, 'simple', 'list'])'[1, "simple", "list"]'

dumps() 函數的另外一個變體 dump(),直接將對象序列化到一個檔案。所以如果 f 是為寫入而開啟的一個 檔案對象,我們可以這樣做:

json.dump(x, f)

為了重新解碼對象可以採用:

x = json.load(f)

我們來編寫一個儲存一組數位簡短程式,再編寫一個將這些數字讀取到記憶體中的程式,第一個程式使用json.dump()來儲存這組數字,第二個程式將使用json.load()
函數json.dump()接受兩個實參:要儲存的資料以及可以用於儲存資料的檔案對象。下面是示範 樣本一

import jsonnumber = [1,2,3,5]file_name = 'number.json' #通過副檔名指紋檔案儲存體的資料為json格式with open(file_name,'w') as file_object:    json.dump(number,file_object)

我們先匯入json模組,再建立一個是數字列表,我們指定存放在number.json裡,檔案尾碼是.json來指出檔案儲存體的資料是json格式,我們再以寫入模式開啟檔案,讓json能見資料寫入其中使用json.dump()將資料寫入,我們沒有寫輸出語句,開啟這個檔案查看,資料存放區的格式與python一樣。
注意json.dump()方法,傳遞兩個參數 第一個要寫入的資料,第二個要儲存的位置的檔案對象。 樣本二

再寫一個程式,使用json.load()讀取到記憶體中

import jsonfile_name = 'number.json' #通過副檔名指紋檔案儲存體的資料為json格式with open(file_name,'r') as file_object:    contents = json.load(file_object)print(contents)

這是在程式間共用資料的簡單方式 儲存和讀取使用者產生的資料

對於使用者輸入的資料,用json來儲存大有裨益,因為如果不以某種方式進行儲存,等程式停止運行時使用者的資訊將丟失。 看一個例子
使用者首次運行程式時被提示輸入自己的名字,再次運行程式時就記住他了,我們先儲存名字

ipt = input('enter your name')filename1 = 'name.json'with open(filename1,'w') as file_object:    json.dump(ipt, file_object)

再讀取之前儲存的名字

with open(filename1,'r') as file_object:    name_ipt = json.load(file_object)print('wleccome %s'%name_ipt)

我們將這兩個程式合并到一個內,在執行的時候先去name.json嘗試獲得使用者名稱,如果沒有這檔案,用try-except處理這個錯誤,併入使用者輸入名字並儲存到name.json中

import jsonfilename1 = 'name.json'try:    with open(filename1)as file_object:        username = json.load(file_object)except FileNotFoundError:    with open(filename1,'w') as file_object2:        user_ipt = input('enter your name i will rember you: ')        json.dump(user_ipt,file_object2)else:    print(username)
三、OS模組常用方法

Python的os模組提供了執行檔案處理操作,如重新命名和刪除檔案的方法。要使用這個模組,需要先匯入它,然後就可以調用任何相關的功能了。 1、重新命名和刪除檔案 rename() 方法

rename()方法有兩個參數,當前檔案名稱和新的檔案名稱。

os.rename(current_file_name, new_file_name)

樣本
以下為例子用來重新命名現有檔案 test1.txt 為 test2.txt:

#!/usr/bin/python3import os# Rename a file from test1.txt to test2.txtos.rename( "test1.txt", "test2.txt" )
remove() 方法

可以使用 remove()方法通過提供參數檔案名稱(file_name)來刪除檔案。

os.remove(file_name)

樣本

下面是刪除現有檔案 test2.txt 的例子 -

#!/usr/bin/python3import os# Delete file test2.txtos.remove("text2.txt")
2、Python目錄

所有的檔案都包含不同的目錄中,Python處理這些目錄操作也沒有什麼問題。os模組中有用於建立,刪除和更改目錄的幾種方法。 mkdir() 方法

可以使用os模組中的 mkdir()方法在目前的目錄下建立目錄。需要提供一個參數到這個方法指定要建立的目錄名。

os.mkdir("newdir")

樣本

下面是在目前的目錄建立 test 目錄的例子 -

#!/usr/bin/python3import os# Create a directory "test"os.mkdir("test")
chdir() 方法

可以使用 chdir() 方法來改變目前的目錄。chdir() 方法接受一個參數,就是你想在目前的目錄建立的目錄的目錄名稱。

os.chdir("newdir")

樣本

以下是進入 “/home/newdir” 目錄的例子-

#!/usr/bin/python3import os# Changing a directory to "/home/newdir"os.chdir("/home/newdir")
getcwd()方法

getcwd()方法顯示當前的工作目錄。

os.getcwd()

樣本

以下是獲得目前的目錄的例子 -

#!/usr/bin/python3import os# This would give location of the current directoryos.getcwd()
rmdir() 方法

rmdir()方法刪除目錄,這是作為方法的參數傳遞。
刪除目錄前,它的所有內容應該先刪除。

os.rmdir('dirname')

樣本
以下是刪除 “/tmp/test” 目錄的例子。它需要給定目錄的完全合格的名稱,否則會從目前的目錄搜尋目錄。

#!/usr/bin/python3import os# This would  remove "/tmp/test"  directory.os.rmdir( "/tmp/test"  )
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.