[Python]輸入與輸出-創(chuàng)新互聯(lián)

1. 讀取命令行選項(xiàng)

Python啟動時(shí),命令行選項(xiàng)放置在列表sys.argv中。例如:

成都創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站建設(shè)、成都網(wǎng)站制作、班戈網(wǎng)絡(luò)推廣、小程序定制開發(fā)、班戈網(wǎng)絡(luò)營銷、班戈企業(yè)策劃、班戈品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們大的嘉獎(jiǎng);成都創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供班戈建站搭建服務(wù),24小時(shí)服務(wù)熱線:13518219792,官方網(wǎng)址:muchs.cn
import sys
if len(sys.argv) != 3:
    sys.stderr.write("Usage: python %s inputfile outputfile\n" % sys.argv[0])
    raise SystemExit(1)
inputfile = sys.argv[1]
outputfile = sys.argv[2]

在該程序中,sys.argv[0]包含所執(zhí)行腳本的名稱。對于更復(fù)雜的命令行處理,可以使用optparse模塊。例如:

imprt optparse
p = optparse.OptionParser()
# 選項(xiàng)接受一個(gè)參數(shù)
p.add_option("-o", action="store", dest="outfile")
p.add_option("--output", action="store", dest="outfile")
# 選項(xiàng)設(shè)置一個(gè)布爾值標(biāo)志
p.add_option("-d", action="store_true", dest="debug")
p.add_option("--debug", action="store_true", dest="debug")
# 設(shè)置選定選項(xiàng)的默認(rèn)值
p.set_defaults(debug=False)
# 解析命令行
opts, args = p.parse_args()
# 檢索選項(xiàng)設(shè)置
outfile = opts.outfile
debugmode = opts.debug

以上例子中添加了兩類選項(xiàng)。第一個(gè)選項(xiàng)-o或--output具有一個(gè)必需參數(shù)。這是通過指定action='store'實(shí)現(xiàn)的。dest參數(shù)選擇將在解析后存儲參數(shù)值的屬性名稱。p.set_defaults()方法設(shè)置一個(gè)或多個(gè)選項(xiàng)的默認(rèn)值。
使用p.parse_args()方法執(zhí)行解析。該方法返回一個(gè)二元組(opts, args),其中opts是包含已解析選項(xiàng)值的對象,args是命令行上未解析為選項(xiàng)的項(xiàng)目列表。選項(xiàng)值使用opts.dest檢索。
?

2. 環(huán)境變量

可以通過字典os.environ訪問環(huán)境變量,例如:

import os
path = os.environ["PATH"]
user = os.environ["USER"]
editor = os.environ["EDITOR"]

要修改環(huán)境變量,需要設(shè)置os.environ變量,例如:

os.environ["FOO"] = "BAR"

3. 文件和文件對象

內(nèi)置函數(shù)open(name [, mode [, bufsize]])用于打開和創(chuàng)建文件對象,例如:

f = open("foo")
f = open("foo", "r")
f = open("foo", "w")

文件模式"r"表示讀取,"w"表示寫入,"a"表示附加。這些文件模式假定采用文本模式,可以隱式對換行字符"\n"執(zhí)行轉(zhuǎn)換。如果正在處理二進(jìn)制數(shù)據(jù),可以將"b"附加到文件模式后面,如"rb"或"wb"。這將禁用換行符轉(zhuǎn)換。如果使用模式"U"或"rU"打開文件,將會提供通用的換行符支持,以方便閱讀。
通過提供"+"字符,比如"r+"或"w+",可以打開文件進(jìn)行直接更新。打開文件進(jìn)行更新時(shí),可以同時(shí)執(zhí)行輸入和輸出,只要所有輸出操作在任何后續(xù)輸入操作之前清除其數(shù)據(jù)即可。如果使用"w+"模式打開文件,其長度首先會被截?cái)酁?。
可選的bufsize參數(shù)控制文件的緩沖行為,其中0表示沒有緩存,1表示進(jìn)行了行緩沖,任何其他正值都表示將使用的近似緩沖區(qū)大小。
下表列表file對象支持的方法:

方法 描述
f.read([n])最多讀取n個(gè)字節(jié)
f.readline([n])讀取單行輸入的最多n個(gè)字符。
f.readlines([size])讀取所有行并返回一個(gè)列表。
f.wirte(s)寫入字符串s
f.writelines(lines)寫入序列l(wèi)ines中的所有字符串
f.close()關(guān)閉文件
f.tell()返回當(dāng)前文件指針
f.seek(offset [, whence])查找新文件位置
f.isatty()如果f是一個(gè)交互式終端,則返回1
f.flush()清除輸出緩沖區(qū)
f.truncate([size])將文件截?cái)酁樽疃鄐ize字節(jié)
f.fileno()返回一個(gè)整數(shù)文件描述符
f.__next__()返回下一行或引發(fā)StopIteration

read()方法以字符串形式返回整個(gè)文件,除非指定了大字符數(shù)。readline()方法返回下一行輸入,包括最后的換行符。readlines()方法以字符串列表的形式返回所有輸入行。readlines()方法接受一個(gè)Size參數(shù),指定在停止讀取之前要讀取的近似字符數(shù)。
write()方法將一個(gè)字符串寫入到文件。writelines()方法將一個(gè)字符串列表寫入到文件中。write()和writelines()不會將換行字符添加到輸出中,所有生成的所有輸出都應(yīng)該已經(jīng)包含所有必要的格式。
在內(nèi)部,每個(gè)文件對象都有一個(gè)文件指針,用于存儲下次讀取或?qū)懭氩僮魉璧淖止?jié)偏移位置。tell()方法以長整型返回文件指針的當(dāng)前值。seek()方法根據(jù)給定的offset和whence中的位置規(guī)則隨機(jī)訪問文件的各個(gè)部分。
fileno()方法返回文件的整數(shù)文件描述符,有時(shí)用在某些庫模塊中的低級I/O操作中。
文件對象還擁有一些只讀數(shù)據(jù)屬性,例如:

屬性 描述
f.closed布爾值,表示文件狀態(tài)。已打開則為False,已關(guān)閉則為True
f.mode文件的I/O模式
f.name如果使用open()創(chuàng)建文件,則為文件名稱。否則將是一個(gè)表示文件來源的字符串
f.softspace布爾值,指示在使用print()語句時(shí),是否應(yīng)該在一個(gè)值之前打印空格字符。
f.newlines在通用換行符模式下打開一個(gè)文件時(shí),該屬性包含可在文件中實(shí)際找到的換行符表示。
f.encoding一個(gè)字符串,指示文件編碼。

4. 標(biāo)準(zhǔn)輸入、輸出和錯(cuò)誤

解釋器提供了3種標(biāo)準(zhǔn)文件對象,分別為標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤,它們在sys模塊中分別以sys.stdin、sys.stdout和sys.stderr的形式提供。stdin是與提供給解釋器的輸入字符流相對應(yīng)的文件對象。stdout是一個(gè)文件對象,接收由print生成的輸出。stderr是接收錯(cuò)誤消息的文件。
例如,以下代碼寫入標(biāo)準(zhǔn)輸出并從標(biāo)準(zhǔn)輸入中讀取一行輸入:

import sys
sys.stdout.write("Enter your name:")
name = sys.stdin.readline()

另外,內(nèi)置函數(shù)input(prompt)也可以從stdin讀取一行文本,并可以打印一個(gè)提示符。鍵盤中斷(通常由Ctrl+C生成)會生成KeyboardInterrupt異常,可使用異常處理程序捕獲該異常。
?

5. print()函數(shù)

要打印一系列以空格分隔的值,只需將這些值提供給print(),例如:

print("The values are", x, y, z)

要禁止或更改行終止,可以使用end=ending關(guān)鍵字參數(shù),例如:

print("The values are", x, y, z, end='') # 禁止換行符

要將輸出重定向到一個(gè)文件,可以使用file=outfile關(guān)鍵字參數(shù),例如:

print("The values are", x, y, z, file=f)

要更改項(xiàng)目之間的分隔字符,可以使用sep=sepchr關(guān)鍵字參數(shù),例如:

print("The values are", x, y, z, spe=',')

6. 文本輸出中的變量插入

通過格式化I/O與三對帶引號的字符串來將變量插入字符串中,例如:

# 斜杠可以防止第一行顯示為空行
form = """\
Dear %(name)s,
Please send back my %(item)s or pay me $%(amount)0.2f.
"""
print form % {'name': 'Mr.Bush', 'item': 'blender', 'amount': 50.00}

format()方法可以使以上代碼更簡潔,例如:

form = """\
Dear {name}s,
Please send back my {item}s or pay me $%{amount:0.2f}.
"""
print form.format {name='Mr.Bush', item='blender', amount=50.00}

7. Unicode處理

如果有一個(gè)原始字節(jié)字符串s,其中包含已編碼的Unicode字符串表示,那么可以使用s.decode([encoding [, errors]])方法將其轉(zhuǎn)換為合適的Unicode字符串。要將Unicode字符串u轉(zhuǎn)換為已編碼的字節(jié)字符串,可以使用字符串方法u.encoding([encoding [, errors]])。這兩種轉(zhuǎn)換字符串都需要使用一個(gè)特殊編碼名稱,指定如何在Unicode字符值與字節(jié)字符串中的一個(gè)8位字符序列上建立起映射關(guān)系。以下編碼是最常用的:

編碼 描述
ascii7位ASCII碼
latin-1或iso-8859-1ISO 8859-1 Latin-1
cp1252Windows 1252編碼
utf-88位變長編碼
utf-1616位變長編碼
utf-16-leUTF-16,小尾編碼
utf-16-beUTF-16,大尾編碼
unicode-escape與Unicode字面量u"string"相同的格式
raw-unicode-escape與Unicode字面量ur"string"相同的格式

默認(rèn)編碼在site模塊中設(shè)置,可以使用sys.getdefaultencoding()查詢。在很多情況下,默認(rèn)編碼是ascii,utf-8也是一種非常常見的設(shè)置。轉(zhuǎn)換字符串時(shí),如果遇到無法轉(zhuǎn)換的字符,可能會引發(fā)UnicodeError異常。encode()和decode()方法的errors參數(shù)決定了如何處理編碼錯(cuò)誤??捎脜?shù)如下:

參數(shù) 描述
strict遇到編碼和解碼錯(cuò)誤時(shí),引發(fā)UnicodeError異常
ignore忽略無效字符
replace將無效字符替換為一個(gè)替換字符
backslashreplace將無效字符替換為Python字符轉(zhuǎn)義序列
xmlcharrefreplace將無效字符替換為XML字符引用

處理Unicode字符串時(shí),無法將原始Unicode數(shù)據(jù)直接寫入文件。因?yàn)閁nicode字符在內(nèi)部表示為多字節(jié)整數(shù)。Unicode字符串的外部表示總是根據(jù)具體的編碼規(guī)則進(jìn)行,該編碼規(guī)則應(yīng)該明確定義如何將Unicode字符表示為字節(jié)序列。內(nèi)置的codecs模塊包含一組函數(shù),用于根據(jù)各種不同的數(shù)據(jù)編碼方案,在字節(jié)數(shù)據(jù)與Unicode字符串之間來回切換。
處理Unicode文件最直接方式是用codecs.open(filename [, mode [, encoding [, errors]]])函數(shù),例如:

f = codecs.open('foo.txt', 'r', 'utf-8', 'strict')
g = codecs.open('bar.txt', 'w', 'utf-8')

這兩個(gè)函數(shù)創(chuàng)建了一個(gè)文件對象,用于讀取或?qū)懭險(xiǎn)nicode字符串。如果已經(jīng)擁有一個(gè)文件對象,可以使用codecs.EncodedFile(file, inputenc [, outputenc [, errors]])函數(shù)為該對象添加一個(gè)編碼包裝器,例如:

f = open("foo.txt", "rb")
...
fenc = codecs.EncodeFile(f, 'utf-8')

8. 對象持久性

有時(shí)會需要將對象內(nèi)容保存到一個(gè)文件或從中進(jìn)行還原。執(zhí)行該任務(wù)的一種方法是編寫兩個(gè)函數(shù),以一種特殊格式在文件中讀取和寫入數(shù)據(jù)。另一種方法是用pickle和shelve模塊。
pickle模塊將對象序列化為一個(gè)字節(jié)流,這個(gè)字節(jié)流可以寫入到文件并在以后進(jìn)行還原。例如:

import pickle
obj = SomeObject()
f = open(filename, 'wb')
pickle.dump(obj, f) # 將對象保存到f上
f.close()

要還原對象,可以使用以下代碼:

import pickle
f = open(filename, 'rb')
obj = pickle.load(f) # 還原對象
f.close()

可以依次發(fā)生一系列dump()操作來保存對象序列。要還原這些對象,只需使用一個(gè)類似的load()操作序列。shelve模塊類似于pickle,但它將對象保存在一個(gè)類似字典的數(shù)據(jù)庫中。例如:

import shelve
obj = SomeObject()
db = shelve.open("filename")
db['key'] = obj
...
obj = db['key']
db.close()

盡管由shelve創(chuàng)建的對象類似于一個(gè)字典,但它具有一些限制。首先,鍵必須是字符串。其次,shelve中存儲的值必須與pickle兼容。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

網(wǎng)站題目:[Python]輸入與輸出-創(chuàng)新互聯(lián)
分享URL:http://muchs.cn/article10/deiodo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)全網(wǎng)營銷推廣、建站公司品牌網(wǎng)站制作、網(wǎng)站設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)