python输⼊输出简单例⼦_Python3基础之输⼊和输出实例分析通常来说,⼀个Python程序可以从键盘读取输⼊,也可以从⽂件读取输⼊;⽽程序的结果可以输出到屏幕上,也可以保存到⽂件中便于以后使⽤。本⽂就来介绍Python中最基本的I/O函数。
⼀、控制台I/O
1.读取键盘输⼊
内置函数input([prompt]),⽤于从标准输⼊读取⼀个⾏,并返回⼀个字符串(去掉结尾的换⾏符):
s = input("Enter your input:")
注:在Python 3.x版本中取消了 raw_input() 函数。
2.打印到屏幕
最简单的输出⽅法是⽤print语句,你可以给它传递零个或多个⽤逗号隔开的表达式:
print([object, ...][, sep=' '][, end='endline_character_here'][, file=redirect_to_here])
⽅括号内是可选的,sep表⽰分割符,end表⽰结束符,file表⽰重定向⽂件。如果要给sep、end、file指
定值必须使⽤关键字参数。
print('hello', 'world', sep='%') # 输出 hello%world
print('hello', 'world', end='*') # 输出 hello world*,并且不换⾏
⼆、⽂件I/O
读写⽂件之前,先⽤open()函数打开⼀个⽂件,它会返回⼀个⽂件对象(file object):
f = open(filename,mode)
如果不指定mode参数,⽂件将默认以‘r'模式打开。模式中的字符有:
r:只读
w:只写,如果⽂件已存在则将其覆盖。如果该⽂件不存在,创建新⽂件
+:读写(不能单独使⽤)
a:打开⽂件⽤于追加,只写,不存在则创建新⽂件
b:以⼆进制模式打开(不能单独使⽤)
所以可能的模式⼤概有r、w、r+、w+、rb、wb、rb+、wb+、a、a+、ab、ab+,注意只有w和a可以创建⽂件。
通常情况下,⽂件都是以⽂本模式(text mode)打开的,也就是说,从⽂件中读写的是以⼀种特定的编码格式进⾏编码(默认的是 UTF-8)的字符串。如果⽂件以⼆进制模式(binary mode)打开,数据将以字节对象的形式进⾏读写:
f = open('a.txt','wb+')
f.write('I like apple!') # 报错
f.write(b'I like apple!') # 以bytes对象的形式进⾏读写
Bytes对象是0到127的不可修改的整数序列,或纯粹的 ASCII 字符,它的⽤途是存储⼆进制数据。
可以通过在⼀个字符串前⾯加上'b'来创建⼀个bytes literal;
也可以通过bytes() 函数创建⼀个 bytes 对象。
注意:如果bytes() 函数的初始化器是⼀个字符串,那么必须提供⼀种编码。
b1 = b'This is string'
b2 = bytes('This is string', 'UTF-8') # 必须指定编码格式
字符串对象与字节对象是不兼容的,要将 bytes 转变为 str, bytes 对象必须要进⾏解码,使⽤decode() ⽅法:
b = bytes('This is string', 'UTF-8')
print(b, b.decode(), sep='\n')
# 输出:
# b'This is string'
# This is string
⽂件对象的⽅法(假设f是⼀个⽂件对象):
f.write(string) :将 string 写⼊到⽂件中,返回写⼊的字符数。如果以⼆进制模式写⽂件,需要将string转换为 bytes 对象。
f.seek(offset, from_what) :改变⽂件对象所处的位置。offset是相对参考位置的偏移量,from_what 取值 0(⽂件头, 默认)、1(当前位置)、2(⽂件尾)表⽰参考位置。
f.close() :关闭⽂件对象。
这些都是很常⽤的⽅法,当然⽂件对象不⽌这些⽅法。根据打开的模式不同,open() 返回的⽂件对象类型也不同:
TextIOWrapper:⽂本模式,返回TextIOWrapper对象。
BufferedReader:读⼆进制,即rb,返回BufferedReader对象。
BufferedWriter:写和追加⼆进制,即wb、ab,返回BufferedWriter对象。
BufferedRandom:读/写模式,即含有+的模式,返回BufferedRandom对象。
可以在这些⽂件对象上运⾏ dir() 或 help(),查看它们所有的⽅法。
python格式化输出format补充:
1、在⽂本模式下,seek()⽅法只会相对于⽂件起始位置进⾏定位。(除了定位⽂件尾可以⽤ seek(0, 2)之外)
2、可以循环迭代⼀个⽂件对象⼀⾏⼀⾏读取:
for line in f:
print(line, end='')
三、格式化输出
⼀般来说,我们希望更多的控制输出格式,⽽不是简单的以空格分割。这⾥有两种⽅式:
第⼀种是由你⾃⼰控制。使⽤字符串切⽚、连接操作以及 string 包含的⼀些有⽤的操作。
第⼆种是使⽤str.format()⽅法。
下⾯给⼀个⽰例:
# 第⼀种⽅式:⾃⼰控制
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
第⼀种⽅式中,字符串对象的 str.rjust() ⽅法的作⽤是将字符串靠右,并默认在左边填充空格,类似的
⽅法还有 str.ljust() 和 ()。这些⽅法并不会写任何东西,它们仅仅返回新的字符串,如果输⼊很长,它们并不会截断字符串。我们注意到,同样是输出⼀个平⽅与⽴⽅表,使⽤str.format()会⽅便很多。
str.format()的基本⽤法如下:
>>> print('We are the {} who say "{}!"'.format('knights', 'Ni'))
We are the knights who say "Ni!"
括号及括号⾥的字符将会被 format() 中的参数替换.。括号中的数字⽤于指定传⼊对象的位置:
>>> print('{0} and {1}'.format('Kobe', 'James'))
Kobe and James
>>> print('{1} and {0}'.format('Kobe', 'James'))
James and Kobe
如果在 format() 中使⽤了关键字参数,那么它们的值会指向使⽤该名字的参数:
>>> print('The {thing} is {adj}.'.format(thing='flower', adj='beautiful'))
The flower is beautiful.
可选项':'和格式标识符可以跟着 field name,这样可以进⾏更好的格式化:
>>> import math
>>> print('The value of PI is {0:.3f}.'.format(math.pi))
The value of PI is 3.142.
在':'后传⼊⼀个整数,可以保证该域⾄少有这么多的宽度,⽤于美化表格时很有⽤:
>>> 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
我们还可以将参数解包进⾏格式化输出。例如,将table解包为关键字参数:
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.
补充:
% 操作符也可以实现字符串格式化。它将左边的参数作为类似 sprintf() 式的格式化字符串,⽽将右边的代⼊:
import math
print('The value of PI is %10.3f.' %math.pi)
# 输出:The value of PI is 3.142.
因为这种旧式的格式化最终会从Python语⾔中移除,应该更多的使⽤ str.format() 。
附:⽂本模式与⼆进制模式
1、在Windows系统中,⽂本模式下,默认是将Windows平台的⾏末标识符 \r\n 在读时转为 \n ,⽽在写时将 \n 转为 \r\n 。 这种隐藏的⾏为对于⽂本⽂件是没有问题的,但是对于⼆进制数据像 JPEG 或 EXE 是会出问题的。在使⽤这些⽂件时请⼩⼼使⽤⼆进制模式。
2、在类Unix/Linux系统中,⾏末标识符为 \n,即⽂件以 \n 代表换⾏。所以Unix/Linux系统中在⽂本模式和⼆进制模式下并⽆区别。
本⽂所述实例读者可以实际动⼿操作测试⼀下,以加深印象,从⽽进⼀步牢固掌握Python基础。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论