[python]输入与输出

1. 读取命令行选项

Python启动时,命令行选项放置在列表sys.argv中。例如:

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]包含所执行脚本的名称。对于更复杂的命令行处理,可以使用optparse模块。例如:

imprt optparse
p = optparse.OptionParser()
# 选项接受一个参数
p.add_option("-o", action="store", dest="outfile")
p.add_option("--output", action="store", dest="outfile")
# 选项设置一个布尔值标志
p.add_option("-d", action="store_true", dest="debug")
p.add_option("--debug", action="store_true", dest="debug")
# 设置选定选项的默认值
p.set_defaults(debug=False)
# 解析命令行
opts, args = p.parse_args()
# 检索选项设置
outfile = opts.outfile
debugmode = opts.debug

以上例子中添加了两类选项。第一个选项-o或--output具有一个必需参数。这是通过指定action=‘store‘实现的。dest参数选择将在解析后存储参数值的属性名称。p.set_defaults()方法设置一个或多个选项的默认值。
使用p.parse_args()方法执行解析。该方法返回一个二元组(opts, args),其中opts是包含已解析选项值的对象,args是命令行上未解析为选项的项目列表。选项值使用opts.dest检索。
?

2. 环境变量

可以通过字典os.environ访问环境变量,例如:

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

要修改环境变量,需要设置os.environ变量,例如:

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

?

3. 文件和文件对象

内置函数open(name [, mode [, bufsize]])用于打开和创建文件对象,例如:

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

文件模式"r"表示读取,"w"表示写入,"a"表示附加。这些文件模式假定采用文本模式,可以隐式对换行字符"\n"执行转换。如果正在处理二进制数据,可以将"b"附加到文件模式后面,如"rb"或"wb"。这将禁用换行符转换。如果使用模式"U"或"rU"打开文件,将会提供通用的换行符支持,以方便阅读。
通过提供"+"字符,比如"r+"或"w+",可以打开文件进行直接更新。打开文件进行更新时,可以同时执行输入和输出,只要所有输出操作在任何后续输入操作之前清除其数据即可。如果使用"w+"模式打开文件,其长度首先会被截断为0。
可选的bufsize参数控制文件的缓冲行为,其中0表示没有缓存,1表示进行了行缓冲,任何其他正值都表示将使用的近似缓冲区大小。
下表列表file对象支持的方法:

方法 描述
f.read([n]) 最多读取n个字节
f.readline([n]) 读取单行输入的最多n个字符。
f.readlines([size]) 读取所有行并返回一个列表。
f.wirte(s) 写入字符串s
f.writelines(lines) 写入序列lines中的所有字符串
f.close() 关闭文件
f.tell() 返回当前文件指针
f.seek(offset [, whence]) 查找新文件位置
f.isatty() 如果f是一个交互式终端,则返回1
f.flush() 清除输出缓冲区
f.truncate([size]) 将文件截断为最多size字节
f.fileno() 返回一个整数文件描述符
f.next() 返回下一行或引发StopIteration

read()方法以字符串形式返回整个文件,除非指定了最大字符数。readline()方法返回下一行输入,包括最后的换行符。readlines()方法以字符串列表的形式返回所有输入行。readlines()方法接受一个Size参数,指定在停止读取之前要读取的近似字符数。
write()方法将一个字符串写入到文件。writelines()方法将一个字符串列表写入到文件中。write()和writelines()不会将换行字符添加到输出中,所有生成的所有输出都应该已经包含所有必要的格式。
在内部,每个文件对象都有一个文件指针,用于存储下次读取或写入操作所需的字节偏移位置。tell()方法以长整型返回文件指针的当前值。seek()方法根据给定的offset和whence中的位置规则随机访问文件的各个部分。
fileno()方法返回文件的整数文件描述符,有时用在某些库模块中的低级I/O操作中。
文件对象还拥有一些只读数据属性,例如:

属性 描述
f.closed 布尔值,表示文件状态。已打开则为False,已关闭则为True
f.mode 文件的I/O模式
f.name 如果使用open()创建文件,则为文件名称。否则将是一个表示文件来源的字符串
f.softspace 布尔值,指示在使用print()语句时,是否应该在一个值之前打印空格字符。
f.newlines 在通用换行符模式下打开一个文件时,该属性包含可在文件中实际找到的换行符表示。
f.encoding 一个字符串,指示文件编码。

?

4. 标准输入、输出和错误

解释器提供了3种标准文件对象,分别为标准输入、标准输出和标准错误,它们在sys模块中分别以sys.stdin、sys.stdout和sys.stderr的形式提供。stdin是与提供给解释器的输入字符流相对应的文件对象。stdout是一个文件对象,接收由print生成的输出。stderr是接收错误消息的文件。
例如,以下代码写入标准输出并从标准输入中读取一行输入:

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

另外,内置函数input(prompt)也可以从stdin读取一行文本,并可以打印一个提示符。键盘中断(通常由Ctrl+C生成)会生成KeyboardInterrupt异常,可使用异常处理程序捕获该异常。
?

5. print()函数

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

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

要禁止或更改行终止,可以使用end=ending关键字参数,例如:

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

要将输出重定向到一个文件,可以使用file=outfile关键字参数,例如:

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

要更改项目之间的分隔字符,可以使用sep=sepchr关键字参数,例如:

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处理

如果有一个原始字节字符串s,其中包含已编码的Unicode字符串表示,那么可以使用s.decode([encoding [, errors]])方法将其转换为合适的Unicode字符串。要将Unicode字符串u转换为已编码的字节字符串,可以使用字符串方法u.encoding([encoding [, errors]])。这两种转换字符串都需要使用一个特殊编码名称,指定如何在Unicode字符值与字节字符串中的一个8位字符序列上建立起映射关系。以下编码是最常用的:

编码 描述
ascii 7位ASCII码
latin-1或iso-8859-1 ISO 8859-1 Latin-1
cp1252 Windows 1252编码
utf-8 8位变长编码
utf-16 16位变长编码
utf-16-le UTF-16,小尾编码
utf-16-be UTF-16,大尾编码
unicode-escape 与Unicode字面量u"string"相同的格式
raw-unicode-escape 与Unicode字面量ur"string"相同的格式

默认编码在site模块中设置,可以使用sys.getdefaultencoding()查询。在很多情况下,默认编码是ascii,utf-8也是一种非常常见的设置。转换字符串时,如果遇到无法转换的字符,可能会引发UnicodeError异常。encode()和decode()方法的errors参数决定了如何处理编码错误。可用参数如下:

参数 描述
strict 遇到编码和解码错误时,引发UnicodeError异常
ignore 忽略无效字符
replace 将无效字符替换为一个替换字符
backslashreplace 将无效字符替换为Python字符转义序列
xmlcharrefreplace 将无效字符替换为XML字符引用

处理Unicode字符串时,无法将原始Unicode数据直接写入文件。因为Unicode字符在内部表示为多字节整数。Unicode字符串的外部表示总是根据具体的编码规则进行,该编码规则应该明确定义如何将Unicode字符表示为字节序列。内置的codecs模块包含一组函数,用于根据各种不同的数据编码方案,在字节数据与Unicode字符串之间来回切换。
处理Unicode文件最直接方式是用codecs.open(filename [, mode [, encoding [, errors]]])函数,例如:

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

这两个函数创建了一个文件对象,用于读取或写入Unicode字符串。如果已经拥有一个文件对象,可以使用codecs.EncodedFile(file, inputenc [, outputenc [, errors]])函数为该对象添加一个编码包装器,例如:

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

?

8. 对象持久性

有时会需要将对象内容保存到一个文件或从中进行还原。执行该任务的一种方法是编写两个函数,以一种特殊格式在文件中读取和写入数据。另一种方法是用pickle和shelve模块。
pickle模块将对象序列化为一个字节流,这个字节流可以写入到文件并在以后进行还原。例如:

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()

可以依次发生一系列dump()操作来保存对象序列。要还原这些对象,只需使用一个类似的load()操作序列。shelve模块类似于pickle,但它将对象保存在一个类似字典的数据库中。例如:

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

尽管由shelve创建的对象类似于一个字典,但它具有一些限制。首先,键必须是字符串。其次,shelve中存储的值必须与pickle兼容。

原文地址:http://blog.51cto.com/hanviseas/2306972

时间: 2024-10-11 15:34:23

[python]输入与输出的相关文章

python输入与输出

python输出 python3中的输出 python3中的输出使用函数print(),示例如下: >>> print('hello kitty') print()也可接受多个参数,使用逗号隔开: >>> print('hello','kitty') hello kitty 可以看到字符串合并输出后,中间会模式使用逗号隔开~ print函数除了可以接收字符串外,也可以接收其他的数据类型 >>> print(1) # 接收整数 1 >>>

【Python】 Python输入和输出

输出格式美化 Python两种输出值得方式:表达式语句和print()函数(第三种方式是使用文件对象的write()方法 标准输出文件可以用sys.stdout引用) 如果你希望输出对的形式更加多样,可以使用str.format()函数来格式化输出值 如果你希望将输出的值转成字符串,可以使用repr()或str()函数来实现. str()函数返回一个用户易读的表达形式. repr()产生一个解释器易读的表达形式. 如 s = 'Hello,world.' str(s) >>>'Hello

python 输入和输出

到目前为止我们遇到过两种输出值的方法: 表达式语句和print语句. (第三个方式是使用文件对象的write()方法: 标准输出文件可以引用 sys.stdout.详细内容参见库参考手册. Python 有方法将任何值转换为字符串:将它传递给repr()或str()函数. str()函数的用意在于返回人类可读的表现形式,而repr()的用意在于生成解释器可读的表现形式(如果没有等价的语法将会引发SyntaxError异常). 字符串对象的str.rjust()方法,它通过在左侧填充空格使字符串在

学习一 python 输入与输出

1 a = 10 b = 20 c =a + b print ('a+b=',c) 这时出输出的结果是 a+b= 30 #注意30前面有一个空格,这是因为在遇到逗号时,python会用空格代替. 2 如果想输出的东西是连续而没有空格的话,可以用格式化字符转义.如下 temp = input("请输入数字a:")a = int(temp)temp = input("请输入数字b:")b = int(temp)temp = input("请输入数字c:&quo

Python输入和输出

在很多时候,你会想要让你的程序与用户(可能是你自己)交互.你会从用户那里得到输入,然后打印一些结果.我们可以分别使用raw_input和print语句来完成这些功能.对于输出,你也可以使用多种多样的str(字符串)类.例如,你能够使用rjust方法来得到一个按一定宽度右对齐的字符串.利用help(str)获得更多详情.另一个常用的输入/输出类型是处理文件.创建.读和写文件的能力是许多程序所必需的,我们将会在这章探索如何实现这些功能. 1.使用文件 #!/usr/bin/python # File

初识python - 输入和输出

若你的程序要接收用户指令,可以用input语法: name = input("What is your name?") print("Hello " + name ) 执行脚本就会发现,程序会等待你输入姓名后再往下继续走. 可以让用户输入多个信息,如下 name = input("What is your name?") age = input("How old are you?") hometown = input(&quo

简谈-Python的输入、输出、运算符、数据类型转换

输出: 格式化输出: 看到了 % 这样的操作符,这就是Python中格式化输出. 换行输出: 在输出的时候,如果有 \n 那么,此时 \n 后的内容会在另外一行显示 输入: 在python2.7当中,使用:raw_input(),在python3中不能使用.Python3只有input() 在python2中的input()把用户输入的东西当成式子(字符)了.所以在python2中一般用raw_input() python3中的input与python2中的raw_input()功能一样 运算符

python入门(6)输入和输出

输出 >>> print 'hello, world' >>> print 'The quick brown fox', 'jumps over', 'the lazy dog' print会依次打印每个字符串,遇到逗号","会输出一个空格,因此,输出的字符串是这样拼起来的: >>> print 300 300 >>> print 100 + 200 300 因此,我们可以把计算100 + 200的结果打印得更漂亮

Python(输入、输出;简单运算符;流程控制)

一 输入输出 python3中统一都是input,python2中有raw_input等同于python3的input,另外python2中也有input 1.res=input("python3: ") 2.res=raw_input("python2: ") 3.res=raw_input("python2: ") 1,2无论接收何种输入,都被存为字符串赋值给res,而3的意思是,用户输入何种类型,就以何种类型赋值给res #!/usr/bi