Python 输入和输出菜鸟教程.docx
- 文档编号:14459353
- 上传时间:2023-06-23
- 格式:DOCX
- 页数:13
- 大小:19.41KB
Python 输入和输出菜鸟教程.docx
《Python 输入和输出菜鸟教程.docx》由会员分享,可在线阅读,更多相关《Python 输入和输出菜鸟教程.docx(13页珍藏版)》请在冰点文库上搜索。
Python输入和输出菜鸟教程
Python输入和输出菜鸟教程
Python输入和输出
在前面几个章节中,我们其实已经接触了Python的输入输出的功能。
本章节我们将具体介绍Python的输入输出。
输出格式美化
Python两种输出值的方式:
表达式语句和print()函数。
(第三种方式是使用文件对象的write()方法;标准输出文件可以用sys.stdout引用。
)
如果你希望输出的形式更加多样,可以使用str.format()函数来格式化输出值。
如果你希望将输出的值转成字符串,可以使用repr()或str()函数来实现。
str()函数返回一个用户易读的表达形式。
repr()产生一个解释器易读的表达形式。
例如
>>>s='Hello,world.'
>>>str(s)
'Hello,world.'
>>>repr(s)
"'Hello,world.'"
>>>str(1/7)
'0.14285714285714285'
>>>x=10*3.25
>>>y=200*200
>>>s='Thevalueofxis'+repr(x)+',andyis'+repr(y)+'...'
>>>print(s)
Thevalueofxis32.5,andyis40000...
>>>#repr()函数可以转义字符串中的特殊字符
...hello='hello,world\n'
>>>hellos=repr(hello)
>>>print(hellos)
'hello,world\n'
>>>#repr()的参数可以是Python的任何对象
...repr((x,y,('spam','eggs')))
"(32.5,40000,('spam','eggs'))"
这里有两种方式输出一个平方与立方的表:
>>>forxinrange(1,11):
...print(repr(x).rjust
(2),repr(x*x).rjust(3),end='')
...#注意前一行'end'的使用
...print(repr(x*x*x).rjust(4))
...
111
248
3927
41664
525125
636216
749343
864512
981729
101001000
>>>forxinrange(1,11):
...print('{0:
2d}{1:
3d}{2:
4d}'.format(x,x*x,x*x*x))
...
111
248
3927
41664
525125
636216
749343
864512
981729
101001000
注意:
在第一个例子中,每列间的空格由print()添加。
这个例子展示了字符串对象的rjust()方法,它可以将字符串靠右,并在左边填充空格。
还有类似的方法,如ljust()和center()。
这些方法并不会写任何东西,它们仅仅返回新的字符串。
另一个方法zfill(),它会在数字的左边填充0,如下所示:
>>>'12'.zfill(5)
'00012'
>>>'-3.14'.zfill(7)
'-003.14'
>>>'3.14159265359'.zfill(5)
'3.14159265359'
str.format()的基本使用如下:
>>>print('Wearethe{}whosay"{}!
"'.format('knights','Ni'))
Wearetheknightswhosay"Ni!
"
括号及其里面的字符(称作格式化字段)将会被format()中的参数替换。
在括号中的数字用于指向传入对象在format()中的位置,如下所示:
>>>print('{0}and{1}'.format('spam','eggs'))
spamandeggs
>>>print('{1}and{0}'.format('spam','eggs'))
eggsandspam
如果在format()中使用了关键字参数,那么它们的值会指向使用该名字的参数。
>>>print('This{food}is{adjective}.'.format(
...food='spam',adjective='absolutelyhorrible'))
Thisspamisabsolutelyhorrible.
位置及关键字参数可以任意的结合:
>>>print('Thestoryof{0},{1},and{other}.'.format('Bill','Manfred',
other='Georg'))
ThestoryofBill,Manfred,andGeorg.
'!
a'(使用ascii()),'!
s'(使用str())和'!
r'(使用repr())可以用于在格式化某个值之前对其进行转化:
>>>importmath
>>>print('ThevalueofPIisapproximately{}.'.format(math.pi))
ThevalueofPIisapproximately3.14159265359.
>>>print('ThevalueofPIisapproximately{!
r}.'.format(math.pi))
ThevalueofPIisapproximately3.141592653589793.
可选项':
'和格式标识符可以跟着字段名。
这就允许对值进行更好的格式化。
下面的例子将Pi保留到小数点后三位:
>>>importmath
>>>print('ThevalueofPIisapproximately{0:
.3f}.'.format(math.pi))
ThevalueofPIisapproximately3.142.
在':
'后传入一个整数,可以保证该域至少有这么多的宽度。
用于美化表格时很有用。
>>>table={'Sjoerd':
4127,'Jack':
4098,'Dcab':
7678}
>>>forname,phoneintable.items():
...print('{0:
10}==>{1:
10d}'.format(name,phone))
...
Jack==>4098
Dcab==>7678
Sjoerd==>4127
如果你有一个很长的格式化字符串,而你不想将它们分开,那么在格式化时通过变量名而非位置会是很好的事情。
最简单的就是传入一个字典,然后使用方括号'[]'来访问键值:
>>>table={'Sjoerd':
4127,'Jack':
4098,'Dcab':
8637678}
>>>print('Jack:
{0[Jack]:
d};Sjoerd:
{0[Sjoerd]:
d};'
'Dcab:
{0[Dcab]:
d}'.format(table))
Jack:
4098;Sjoerd:
4127;Dcab:
8637678
也可以通过在table变量前使用'**'来实现相同的功能:
>>>table={'Sjoerd':
4127,'Jack':
4098,'Dcab':
8637678}
>>>print('Jack:
{Jack:
d};Sjoerd:
{Sjoerd:
d};Dcab:
{Dcab:
d}'.format(**table))
Jack:
4098;Sjoerd:
4127;Dcab:
8637678
旧式字符串格式化
%操作符也可以实现字符串格式化。
它将左边的参数作为类似sprintf()式的格式化字符串,而将右边的代入,然后返回格式化后的字符串.例如:
>>>importmath
>>>print('ThevalueofPIisapproximately%5.3f.'%math.pi)
ThevalueofPIisapproximately3.142.
因为str.format()比较新的函数,大多数的Python代码仍然使用%操作符。
但是因为这种旧式的格式化最终会从该语言中移除,应该更多的使用str.format().
读和写文件
open()将会返回一个file对象,基本语法格式如下:
open(filename,mode)
以下实例将字符串写入到文件foo.txt中:
#!
/usr/bin/python3
#打开一个文件
f=open("/tmp/foo.txt","w")
f.write("Python是一个非常好的语言。
\n是的,的确非常好!
!
\n")
#关闭打开的文件
f.close()第一个参数为要打开的文件名。
第二个参数描述文件如何使用的字符。
mode可以是'r'如果文件只读,'w'只用于写(如果存在同名文件则将被删除),和'a'用于追加文件内容;所写的任何数据都会被自动增加到末尾.'r+'同时用于读写。
mode参数是可选的;'r'将是默认值。
此时打开文件foo.txt,显示如下:
$cat/tmp/foo.txt
Python是一个非常好的语言。
是的,的确非常好!
!
文件对象的方法
本节中剩下的例子假设已经创建了一个称为f的文件对象。
f.read()
为了读取一个文件的内容,调用f.read(size),这将读取一定数目的数据,然后作为字符串或字节对象返回。
size是一个可选的数字类型的参数。
当size被忽略了或者为负,那么该文件的所有内容都将被读取并且返回。
以下实例假定文件foo.txt已存在(上面实例中已创建):
#!
/usr/bin/python3
#打开一个文件
f=open("/tmp/foo.txt","r")
str=f.read()
print(str)
#关闭打开的文件
f.close()
执行以上程序,输出结果为:
Python是一个非常好的语言。
是的,的确非常好!
!
f.readline()
f.readline()会从文件中读取单独的一行。
换行符为'\n'。
f.readline()如果返回一个空字符串,说明已经已经读取到最后一行。
#!
/usr/bin/python3
#打开一个文件
f=open("/tmp/foo.txt","r")
str=f.readline()
print(str)
#关闭打开的文件
f.close()
执行以上程序,输出结果为:
Python是一个非常好的语言。
f.readlines()
f.readlines()将返回该文件中包含的所有行。
如果设置可选参数sizehint,则读取指定长度的字节,并且将这些字节按行分割。
#!
/usr/bin/python3
#打开一个文件
f=open("/tmp/foo.txt","r")
str=f.readlines()
print(str)
#关闭打开的文件
f.close()
执行以上程序,输出结果为:
['Python是一个非常好的语言。
\n','是的,的确非常好!
!
\n']
另一种方式是迭代一个文件对象然后读取每行:
#!
/usr/bin/python3
#打开一个文件
f=open("/tmp/foo.txt","r")
forlineinf:
print(line,end='')
#关闭打开的文件
f.close()
执行以上程序,输出结果为:
Python是一个非常好的语言。
是的,的确非常好!
!
这个方法很简单,但是并没有提供一个很好的控制。
因为两者的处理机制不同,最好不要混用。
f.write()
f.write(string)将string写入到文件中,然后返回写入的字符数。
#!
/usr/bin/python3
#打开一个文件
f=open("/tmp/foo.txt","w")
num=f.write("Python是一个非常好的语言。
\n是的,的确非常好!
!
\n")
print(num)
#关闭打开的文件
f.close()
执行以上程序,输出结果为:
29
如果要写入一些不是字符串的东西,那么将需要先进行转换:
#!
/usr/bin/python3
#打开一个文件
f=open("/tmp/foo1.txt","w")
value=('',14)
s=str(value)
f.write(s)
#关闭打开的文件
f.close()
执行以上程序,打开foo1.txt文件:
$cat/tmp/foo1.txt
('',14)
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('/tmp/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'
f.close()
在文本文件中(那些打开文件的模式下没有b的),只会相对于文件起始位置进行定位。
当你处理完一个文件后,调用f.close()来关闭文件并释放系统的资源,如果尝试再调用该文件,则会抛出异常。
>>>f.close()
>>>f.read()
Traceback(mostrecentcalllast):
File"",line1,in?
ValueError:
I/Ooperationonclosedfile
当处理一个文件对象时,使用with关键字是非常好的方式。
在结束后,它会帮你正确的关闭文件。
而且写起来也比try-finally语句块要简短:
>>>withopen('/tmp/foo.txt','r')asf:
...read_data=f.read()
>>>f.closed
True
文件对象还有其他方法,如isatty()和trucate(),但这些通常比较少用。
pickle模块
python的pickle模块实现了基本的数据序列和反序列化。
通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储。
通过pickle模块的反序列化操作,我们能够从文件中创建上一次程序保存的对象。
基本接口:
pickle.dump(obj,file,[,protocol])
有了pickle这个对象,就能对file以读取的形式打开:
x=pickle.load(file)
注解:
从file中读取一个字符串,并将它重构为原来的python对象。
file:
类文件对象,有read()和readline()接口。
实例1:
#使用pickle模块将数据对象保存到文件
importpickle
data1={'a':
[1,2.0,3,4+6j],
'b':
('string',u'Unicodestring'),
'c':
None}
selfref_list=[1,2,3]
selfref_list.append(selfref_list)
output=open('data.pkl','wb')
#Pickledictionaryusingprotocol0.
pickle.dump(data1,output)
#Picklethelistusingthehighestprotocolavailable.
pickle.dump(selfref_list,output,-1)
output.close()
实例2:
#使用pickle模块从文件中重构python对象
importpprint,pickle
pkl_file=open('data.pkl','rb')
data1=pickle.load(pkl_file)
pprint.pprint(data1)
data2=pickle.load(pkl_file)
pprint.pprint(data2)
pkl_file.close()
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Python 输入和输出 菜鸟教程 输入 输出 菜鸟 教程
![提示](https://static.bingdoc.com/images/bang_tan.gif)