Python学习 Part5:输入输出

1. 格式化输出

三种输出值的方法:

  • 表达式语句
  • print()函数
  • 使用文件对象的write()方法

两种方式格式化输出:

  • 由自己处理整个字符串,通过使用字符串切割和连接操作创建任何想要的输出形式
  • 使用str.formate()方法

将值转换为字符串的方法:

  • 将它传递给repr()函数
  • 将它传递给str()函数
  1. >>> s='Hello, world.'
  2. >>> str(s)
  3. 'Hello, world.'
  4. >>> repr(s)
  5. "'Hello, world.'"
  6. >>> str(0.1)
  7. '0.1'
  8. >>> repr(0.1)
  9. '0.1'
  10. >>> x=10*3.25
  11. >>> y=200*200
  12. >>> s='The value of x is '+repr(x)+', and y is '+repr(y)+'...'
  13. >>> print(s)
  14. The value of x is 32.5, and y is 40000...
  15. >>> hello='hello, world\n'
  16. >>> hellos=repr(hello)
  17. >>> print(hellos)
  18. 'hello, world\n'
  19. >>> repr((x,y,('spam','eggs')))
  20. "(32.5, 40000, ('spam', 'eggs'))"
  21. >>> str((x,y,('spam','eggs')))
  22. "(32.5, 40000, ('spam', 'eggs'))"
  23. >>>
  1. >>> for x in range(1,11):
  2. print(repr(x).rjust(10),repr(x*x).rjust(3),end=' ')
  3. print(repr(x*x*x).rjust(4))
  4.  
  5. 1 1 1
  6. 2 4 8
  7. 3 9 27
  8. 4 16 64
  9. 5 25 125
  10. 6 36 216
  11. 7 49 343
  12. 8 64 512
  13. 9 81 729
  14. 10 100 1000
  15. >>> for x in range(1,11):
  16. print(repr(x).rjust(2),repr(x*x).rjust(11),end=' ')
  17. print(repr(x*x*x).rjust(4))
  18.  
  19. 1 1 1
  20. 2 4 8
  21. 3 9 27
  22. 4 16 64
  23. 5 25 125
  24. 6 36 216
  25. 7 49 343
  26. 8 64 512
  27. 9 81 729
  28. 10 100 1000
  29. >>>
  30. >>> for x in range(1,11):
  31. print('{0:2d}{1:3d}{2:4d}'.format(x,x*x,x*x*x))
  32.  
  33. 1 1 1
  34. 2 4 8
  35. 3 9 27
  36. 4 16 64
  37. 5 25 125
  38. 6 36 216
  39. 7 49 343
  40. 8 64 512
  41. 9 81 729
  42. 101001000
  43. >>> for x in range(1,11):
  44. print('{0:2d}{1:10d}{2:4d}'.format(x,x*x,x*x*x))
  45.  
  46. 1 1 1
  47. 2 4 8
  48. 3 9 27
  49. 4 16 64
  50. 5 25 125
  51. 6 36 216
  52. 7 49 343
  53. 8 64 512
  54. 9 81 729
  55. 10 1001000
  56. >>>

上面的示例演示了字符串对象的rjust()方法,它通过在字符串左侧填充指定宽度的空格以使其右对齐。还有两个类似的方法:ljust()和center()。如果输入的字符串过长,它们不会截断它,而是原样返回。
还有另一个方法:zfill(),使用零在数字字符串左侧填充(到指定宽度)。它可以理解正负号

  1. >>> '12'.zfill(5)
  2. '00012'
  3. >>> '-3.14'.zfill(7)
  4. '-003.14'
  5. >>> '3.1415926'.zfill(5)
  6. '3.1415926'
  7. >>>

str.format()方法基本的用法:

  1. >>> print('We are the {0} who say "{1}!"'.format('knights','Ni'))
  2. We are the knights who say "Ni!"
  3. >>> print('{0} and {1}'.format('spam','eggs'))
  4. spam and eggs
  5. >>> print('{1} and {0}'.format('spam','eggs'))
  6. eggs and spam
  7. >>>
  8. >>> #使用关键字参数
  9. >>> print('This {food} is {adjective}.'.format(food='spam',adjective='absolutely horrible'))
  10. This spam is absolutely horrible.

字段名称后面可以跟一个可选的':' 符号和格式化分类符。下面的示例将PI小数后截断为三位

  1. >>> import math
  2. >>> print('The value of PI is approximately {0:.3f}.'.format(math.pi))
  3. The value of PI is approximately 3.142.

通过在':'后面传递一个整数可以限定那个字段的最小字符宽度。

  1. >>> table={'Sjoerd':4127,'Jack':4098,'Dcab':7678}
  2. >>> for name,phone in table.items():
  3. print('{0:10}==>{1:10d}'.format(name,phone))
  4.  
  5. Dcab ==> 7678
  6. Sjoerd ==> 4127
  7. Jack ==> 4098
  8. >>>

如果有一个不想分割的确实很长的字符串,使用名称替代位置来引用被格式化的变量将会更好:

  1. >>> print('Jack:{0[Jack]:d}; Sjoerd:{0[Sjoerd]:d};''Dcab:{0[Dcab]:d}'.format(table))
  2. Jack:4098; Sjoerd:4127;Dcab:76786736737383863

2. 文件读写

open()函数返回一个文件对象,并且它通常带有两个参数: open(filename,mode)

  1. >>> f=open('/software','w')

第二个参数描述了文件使用的方式(是可选的,默认值是'r'):

  • 'r' 文件为只读
  • 'w' 文件为只写
  • 'a' 表示已追加方式打开文件,所有的数据都会被自动地添加到文件末尾
  • 'r+' 表示以读写方式打开文件

文件对象的方法:

  • f.read(size)方法:读取一个文件的内容。如果没有指定size或者它为负数,就会读取并返回文件的全部内容。如果已经达到文件尾,f.read()将返回一个空字符串
  1. >>> f=open('/Users/Administrator/Desktop/test.txt','r+')
  2. >>> f.read()
  3. 'This is for testing.\nThe second line.\nThe third line.'
  4. >>> f.read()
  5. ''
  • f.readline()方法:从文件中读取单独一行内容
  1. >>> f=open('/Users/Administrator/Desktop/test.txt','r+')
  2. >>> f.readline()
  3. 'This is for testing.\n'
  4. >>> f.readline()
  5. 'The second line.\n'
  6. >>> f.readline()
  7. 'The third line.'
  8. >>> f.readline()
  9. ''
  • f.readlines()方法:返回一个包含文件所有数据行的列表
  1. >>> f=open('/Users/Administrator/Desktop/test.txt','r+')
  2. >>> f.readlines()
  3. ['This is for testing.\n', 'The second line.\n', 'The third line.']
  1. >>> f=open('/Users/Administrator/Desktop/test.txt','r+')
  2. >>> for line in f:
  3. print(line,end=' ')
  4.  
  5. This is for testing.
  6. The second line.
  7. The third line.
  • f.write(string)方法:将string的内容写入文件,并返回写入字符的长度;如果想要写入其他非字符串内容,首先要将它转换为字符串
  1. >>> f=open('/Users/Administrator/Desktop/test.txt','r+')
  2. >>> value=('the answer',42)
  3. >>> s=str(value)
  4. >>> f.write(s)
  5. 18
  6. >>> f=open('/Users/Administrator/Desktop/test.txt','r+')
  7. >>> f.readlines()
  8. ["('the answer', 42)"]
  • f.tell()方法:返回一个指代文件对象当前位置的整数,表示从文件开头到当前位置的字节数
  • f.seek(offset,from_what)方法:改变文件对象位置。新的位置通过将offset值与参考点相加得到,参考点是由参数from_what确定。如果from_what值为0则代表从文件头开始计算,值为1时代表从当前文件位置开始计算,值为2时代表从文件尾开始计算,省略时默认为0.
  1. >>> f=open('/Users/Administrator/Desktop/test.txt','r+')
  2. >>> f.write('0123456789abcdef')
  3. 16
  4. >>> f.seek(5)
  5. 5
  6. >>> f.read(1)
  7. '5'
  8. >>> f.seek(-3,2)
  9. Traceback (most recent call last):
  10. File "<pyshell#17>", line 1, in <module>
  11. f.seek(-3,2)
  12. io.UnsupportedOperation: can't do nonzero end-relative seeks
  13. >>>

在文本文件中,没有使用b模式选项打开的文件,只允许从文件头开始计算相对位置,从文件尾计算时就会引发异常。

  1. >>> f=open('/Users/Administrator/Desktop/test.txt','rb+')
  2. >>> f.write(b'0123456789abcdef')
  3. 16
  4. >>> f.seek(-3,2)
  5. 13
  6. >>> f.read(1)
  7. b'd'
  8. >>>
  • f.close()方法:关闭文件并释放其占用的所有系统资源
  • 在处理文件对象时,使用with关键字是个好习惯。在文件一系列操作后它会被适当的关闭
  1. >>> with open('/Users/Administrator/Desktop/test.txt','r') as f:
  2. read_data=f.read()
  3.  
  4. >>> read_data
  5. '0123456789abcdef'
  6. >>> f.closed
  7. True

pickle模块:

将任何Python对象转换为字符串表示形式,这个过程称为pickling(封装),从这个字符串表示形式中重建Python对象被称为unpickling(拆封)

如果你有一个对象x和一个已经打开并等待写入的文件对象f,封装对象的最简单方法只需要一行代码:

  1. >>> pickle.dump(x,f)

想要拆封这个对象,如果存在一个已经打开并等待读取的文件对象f,即可:

  1. >>> x=pickle.load(f)

Python学习 Part5:输入输出的更多相关文章

  1. Python学习之输入输出入门 A+B篇

    描述 求两个整数之和. 输入 输入数据只包括两个整数A和B. 输出 两个整数的和. 样例输入 1 2 样例输出  3 a=input().split() print(int(a[0])+int(a[1 ...

  2. Python学习之输入输出、数据类型

    #coding=utf-8 # 输入 print'100+200=',100+200 # 输入 # name = raw_input('tell me your name:') # print'hel ...

  3. 180分钟的python学习之旅

    最近在很多地方都可以看到Python的身影,尤其在人工智能等科学领域,其丰富的科学计算等方面类库无比强大.很多身边的哥们也提到Python非常的简洁方便,比如用Django搭建一个见得网站只需要半天时 ...

  4. python学习笔记目录

    人生苦短,我学python学习笔记目录: week1 python入门week2 python基础week3 python进阶week4 python模块week5 python高阶week6 数据结 ...

  5. Python学习---Python安装与基础1205

    1.0. 安装 1.1.1. 下载 官网下载地址:https://www.python.org/downloads/release/python-352/ 1.1.2. 配置环境变量 因为在安装的时候 ...

  6. Python学习(二)Python 简介

    Python 简介 官方指南及文档 Python2.7官方指南(中文版):http://pan.baidu.com/s/1dDm18xr Python3.4官方指南(中文版):http://pan.b ...

  7. 第1章 Python学习环境构建目录

    第1章 引子 第1.1节 学习环境搭建 第1.2节 Python学习环境的使用 第2章 Python编程基础知识 第2.1节 简单的Python数据类型.变量赋值及输入输出 第2.2节 Python的 ...

  8. Python 学习笔记(上)

    Python 学习笔记(上) 这份笔记是我在系统地学习python时记录的,它不能算是一份完整的参考,但里面大都是我觉得比较重要的地方. 目录 Python 学习笔记(上) 基础知识 基本输入输出 模 ...

  9. Python学习的十个阶段,学完神功大成,对应一下看看你自己在哪个阶段

    大家好,我是白云. 今天给大家整理了Python学习的十个阶段内容,看看你现在正处于哪个阶段,想学习的朋友也可以根据这个阶段规划学习. 阶段一:Python基础[ 初入江湖] Linux基础 目标: ...

随机推荐

  1. 【翻译】在Sencha Touch中创建离线/在线代理

    原文:Creating an Online/Offline proxy in Sencha Touch 概述 在Sencha Touch中,一个常见的需求就是,当设备在没有连接互联网的时候,应用程序必 ...

  2. MPlayer 使用手册中文版

    播放文件 使用 MPlayer 播放媒体文件最简单的方式是: mplayer <somefile> MPlayer 会自动检测文件的类型并加以播放,如果是音频文件,则会在命令行中显示该播放 ...

  3. mongodb系列之--分片的原理与配置

    1.分片的原理概述 分片就是把数据分成块,再把块存储到不同的服务器上,mongodb的分片是自动分片的,当用户发送读写数据请求的时候,先经过mongos这个路由层,mongos路由层去配置服务器请求分 ...

  4. Camera 涉及的文件70

    点击打开链接 Camera 涉及的文件 1.上电时序 Mediate/custom/$PROJECT/Camera/Camera/kd_camera_hw.c Mediate/custom/$PROJ ...

  5. 【53】java的多线程同步剖析

    synchronized关键字介绍: synchronized锁定的是对象,这个很重要 例子: class Sync { public synchronized void test() { Syste ...

  6. 利用可变参实现fprintf函数

    #include <stdio.h> #include <stdarg.h> /* 可变参相关接口 typedef char * va_list ; void va_start ...

  7. UNIX/Linux C 程序员需要掌握的七种武器

    我是一名普通的软件工程师,不是什么技术大牛.这篇文章所提到的"七种武器"只是我这些年工作经验的一点体会和感悟,如果有错误的地方,还请大家指正. (一)C语言 作为一名C程序员,熟练 ...

  8. "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: no freetype in java.library.path

    Exception in thread "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: no freetype in java ...

  9. 杭电ACM 1001题

    import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc=ne ...

  10. jQuery live()方法使用及变更(事件委托)

    根据jQuery的官方描述,live方法在1.7中已经不建议使用,在1.9中删除了这个方法.并建议在以后的代码中使用on方法来替代. on方法可以接受三个参数:事件名.触发选择器.事件函数. 需要特别 ...