设为首页 收藏本站
查看: 1152|回复: 0

[经验分享] 「学习笔记——Python」Python输入和输出

[复制链接]

尚未签到

发表于 2015-4-24 10:33:26 | 显示全部楼层 |阅读模式
7 Python 输入和输出
  呈现程序输出结果的方式有很多,可以以可读方式打印出来,也可以写入文件以便将来使用。这一章,将会讲述这些可能的方式。



Table of Contents




  • 1 输入格式
  • 2 读写文件



1 输入格式


  很多时候,我们不仅仅想只打印出结果,还对输出格式有所需求。有两种方式可以完成这一点,一是使用字符串的分割,合并,等 功能自己确定输出格式,你可以得到你想要的任何布局。二是使用 str.format() 函数。 这里有一个问题,如何把各种各样的值转化为字符串呢?Python 提供了 repr() 和 str() 来将任何值转化为字符串。 str() 函数会返回人类易读的格式, 而repr()则会返回供解释器读取的格式。但是,如果转化不成人类易读的方式,两个函数 的输出就会一样。

>>> print str('hello\n')
hello
>>> print repr('hello\n')
'hello\n'

  下面是两种打印列表的方式:

>>> for i in range(1,11):
...     print repr(i).rjust(2), repr(i*i).rjust(3),
...     print repr(i*i*i).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  729
10 100 1000

>>> for i in range(1,11):
...     print '{0:2d} {1:3d} {2:4d}'.format(i,i*i,i*i*i)
...
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

  注意2,3,4是指占几列,列之间的空格是python自动加上的,除str.rjust()之外,还有str.ljust(),str.center(), 它们默认不会截断,除非你用 r.ljust(n)[:n] 指定. : 前的数字表示这一列的内容显示format后的第几个参数,后面的数字表示占几列
  还有一个方法,str.zfill(),可以在数字左边加0.

>>> '12'.zfill(4)
'0012'

  str.format() 使用的基本方式就是

>>> 'this is a {} called {}'.format('language','python')
'this is a language called python'

  {}内的内容决定了这个位置是什么

>>> 'this is a {} called {}'.format('language','python')
'this is a language called python'
>>> 'this is a {0} called {1}'.format('language','python')
'this is a language called python'
>>> 'this is a {1} called {0}'.format('language','python')
'this is a python called language'
>>> 'this is a {1} called {1}'.format('language','python')
'this is a python called python'

  如果{}内出现了关键字,其内容由format后的定义决定

>>> 'my favourite language is {lan}'.format(lan = 'python')
'my favourite language is python'

  旧的字符串格式 str.format() 是一种新的字符串格式化方式,以前的代码都使用 %, 和sprintf差不多

>>> pi = 3.1415926
>>> 'test float format:%5.2f' % pi
'test float format: 3.14'



2 读写文件


  open() 返回一个文件对象,经常带有两个参数:open(filename, mode) mode 可以为:


  • r: 只读
  • w: 只写
  • a: 添加
  • r+: 读写
  • mode 也可以缺省,默认为r

>>> open('fileToTest.hi', 'r')


  上述代码会返回一个文件对象,我们可以用它进行文件操作

>>> fileobj = open('fileToTest.hi', 'r')
>>> fileobj.read()
'this is a file to be test by python\nthis is second line\nthis is end line'
>>> fileobj.read()
''

  把文件内容读完后,再去读就会返回空字符串
  还可以一行一行读

>>> fileobj = open('fileToTest.hi', 'r')
>>> fileobj.readline()
'this is a file to be test by python\n'
>>> fileobj.readline()
'this is second line\n'
>>> fileobj.readline()
'this is end line'

  或者返回多行构成的list

>>> fileobj = open('fileToTest.hi', 'r')
>>> fileobj.readlines()
['this is a file to be test by python\n', 'this is second line\n', 'this is end line']

  另一种逐行读取的方式是:

>>> fileobj = open('fileToTest.hi', 'r')
>>> for line in fileobj:
...     print line
...
this is a file to be test by python
this is second line
this is end line

  可以使用 f.wirte(string) 写入文件

>>> fw = open('fileToTest.hi', 'w')
>>> fw.write('Hello,pyhon\nhi,jack')
>>> fw.close()

  写入之后要用f.close()关闭文件对象,否则f.write(str)没有真正写入文件。
  如果一个值不是字符串,可以用str()先转化为字符串,再用f.wirte()写入。
  f.tell()返回文件对象当前位置,f.seek(offset, fromWhat) 用于设置当前位置

>>> fr = open('fileToTest.hi', 'r')
>>> fr.tell()
0L
>>> fr.read()
'hihio,pyhon\nhi,jack'
>>> fr.tell()
19L
>>> fr.read()
''
>>> fr.seek(0,0)
>>> fr.read()
'hihio,pyhon\nhi,jack'

  如果仅仅是读写字符串,那么没什么大问题,但是如果文件中存储的是整数,或者更复杂的数据结构,比如字典。就会 遇到麻烦,因为读写都是针对字符串而言的。鉴于这个原因,python提供了名为 pickle 的模块。可以将任何类型的 python 对象转化为字符串,这个过程称为 picking. 反过来也可以将字符串转化为任何类型的对象,这个过程称为 unpicking.
  例如:x 是一个对象, f 是一个用于写的文件对象, picking过程就是:

pickle.dump(x, f)

  unpicking过程:

x = pickle.load(f)

  下面做一个测验

>>> fw = open('foo.c', 'w')
>>> x = {'asdf','qwert'}
>>> import pickle
>>> pickle.dump(x,fw)
>>> fw.close()
>>> fr = open('foo.c', 'r')
>>> y = pickle.load(fr)
>>> y
set(['qwert', 'asdf'])





原文链接:http://docs.python.org/2/tutorial/inputoutput.html

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-60231-1-1.html 上篇帖子: 自学python第一天-在linux中要直接运行python 下篇帖子: python自定义函数在Python解释器中调用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表