这一章主要是讲述程序展示其数据的一些方法,一般都是直接按照一定的格式输出在屏幕,或者写入到文件以便以后使用。按照一定格式的输出,在python中实际就是对str的操作,主要就是介绍了formart()的灵活使用。然后就是基本的打开文件,内置的函数open()后,可以对文件进行简单的读取,按需读取等,最后大致介绍了下JSON数据结构。

5.1 旧的字符串格式输出方式

使用%输出字符串,这是我未看文档前知道的,也以为是唯一的print输出字符串方式,看完之后才知道这种方式已经在2.7.11中被称为old的了。

>>> import math
>>> print 'The value of PI is approximately %5.3f.' % math.pi
The value of PI is approximately 3.142.

5.2  友好的格式化输出

如果你想更好的控制你的输出而不是简单的打印一些空格,通常有2种方式,一种是自己处理所有的字符串,使用string的切片和连接操作,字符串类型有一些方法,用于执行将字符串填充到指定列宽度的有用操作,第二种方法是使用str的format()方法。

要使用str的format()方法,当然首先要保证当前对象的类型就是string类型,string模块提供了2个方法,可以讲任何对象都转换成string对象。str()和repr()。他们之间区别如下:str()返回一个人类可读性强的字符串,而repr()返回式解释器可读的字符串;对于数字,列表,字段这些数据结构,使用这2个方法得到的是同样的结果,但是对字符串和浮点数的使用是不相同的:

    s = 'hello\n'print sprint str(s)print repr(s)print str(math.pi)print repr(math.pi)

结果如下:

可以看到:repr()在操作string字符串的时候增加了引号和反斜杠,而str是没有的。

现需要打印出1-10的1次方,2次方,3次方的值,如下所示:

 1   1    12   4    83   9   274  16   645  25  1256  36  2167  49  3438  64  5129  81  729
10 100 1000

按照以前的思维会怎么做呢?以我c++刚入门的功力写,貌似更搓,需要打印数值,再打印空格。。。。

python单纯的使用string类型的方法,可以这样实现:

    for x in range(1,11):print str(x).ljust(2),str(x*x).ljust(3),str(x*x*x).ljust(4)

ljust()是str模块内的一个方法,函数原型是: S.ljust(width[, fillchar]) -> string,在字符串的左边插入width个fillchar,默认fillchar是space。巧妙的实现了字符串后面空N格的需求,当然有左边,肯定有右边,也有中间,对应的方法是 str.ljust() and str.center(),具体使用就不举例了。

如果使用str的format方法,貌似更简洁了:

    for x in range(1,11):print '{0:10d} {1:10d} {2:10d}'.format(x,x*x,x*x*x)

format的基本使用如下:花括号及其中的字符(称为格式字段)将被替换为传递给str.format()方法的对象。括号中的数字指传递给str.format()方法的对象的位置。

>>> print 'We are the {} who say "{}!"'.format('knights', 'Ni')
We are the knights who say "Ni!

>>> print 'The story of {0}, {1}, and {other}.'.format('Bill', 'Manfred',other='Georg')

The story of Bill, Manfred, and Georg.
>>>table = {'name':'loleina','age':25}>>>print 'name :{name}, age:{age:d}'.format(**table)

数字后后允许可选的':'和格式指令。这样可以更好地控制如何设置值的格式。下面的例子将 Pi 转为三位精度。

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

':'后面紧跟一个整数可以限定该字段的最小宽度。

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

5.3 读写文件

调用内置函数open()可以返回一个文件对象,一般都是带2个参数:open(filename, mode)

>>> f = open('workfile', 'w')
>>> print f
<open file 'workfile', mode 'w' at 80a0960>

第一个参数是一个含有文件名的字符串。第二个参数也是一个字符串,含有描述如何使用该文件的几个字符。mode为'r'时表示只是读取文件;w表示只是写入文件(已经存在的同名文件将被删掉);'a'表示打开文件进行追加,写入到文件中的任何数据将自动添加到末尾。'r+'表示打开文件进行读取和写入。mode 参数是可选的,默认为'r'

这个例子是官网的例子,运行后,在当前项目的目录下生成了一个workfile的文件,类型为文件类型(不是文本类型),如果在文件名后加上txt,就生成了一个文本文档类型。

在 Windows 平台上,模式后面追加'b'表示以二进制方式打开文件,所以也有像'rb'、 'wb''r+b'这样的模式。Python 在 Windows 平台上区分文本文件和二进制文件;读取或写入文本文件中时,行尾字符会被自动地稍加改变。这种修改对 ASCII 文本文件没有问题,但会损坏JPEGEXE这样的二进制文件中的数据。在读写这些文件时一定要记得以二进制模式打开。在 Unix 平台上,在模式后面附加一个'b'也不会有坏处,这样可以用写好的文件访问代码来读写任何平台上的所有二进制文件。

得到文件句柄后,可以对文件进行读写操作,一次性读取read();一行一行读取readline(),不去掉换行符;写操作write();查询当前文件游标(偏移量)tell(),移动游标seek();read()函数内如果加整型参数,表示读取整数个byte。举例如下:

    f = open('test.txt','r+')print fprint f.read()    f.close()    运行结果:

<open file 'test.txt', mode 'r+' at 0x0341D1D8>
     first line
     second line

third line

    r = open('workfile','r+')r.write('0123456789abcdefg')print r.tell()print r.seek(5)print r.read(1)print r.tell()    r.close()  运行结果:

17
      None
      5
      6

在python中处理文件对象时使用with关键字是很好的做法。这样做的好处在于文件用完后会自动关闭,即使过程中发生异常也没关系。它还比编写一个等同的try-finally语句要短很多,如果需要读取文件内每一行,可以循环遍历文件对象来读取文件中的每一行。这是既省内存又非常快的简单代码。

    with open('workfile','r') as f:for line in f:print lineprint f.closed    运行结果:

0123456789abcdefg
     True

5.4 使用json存储结构化数据

从文件中读写字符串并不是很难。数值就要多费点儿周折,因为read ()方法只会返回字符串,应将其传入int()这样的函数,就可以将'123'这样的字符串转换为对应的数值 123。当你想要保存更为复杂的数据类型,例如嵌套的列表和字典,手工解析和序列化它们将变得更复杂。Python 允许使用常用的数据交换格式JSON(JavaScript Object Notation)。标准模块json可以接受 Python 数据结构,并将它们转换为字符串表示形式;此过程称为序列化。从字符串表示形式重新构建数据结构称为反序列化。序列化和反序列化的过程中,表示该对象的字符串可以存储在文件或数据中,也可以通过网络连接传送给远程的机器。

这一章节,之前有专门总结过,再次就不墨迹了。可以点此链接进行查看: python对json的操作总结

转载于:https://www.cnblogs.com/loleina/p/5776564.html

python学习笔记系列----(五)输入和输出相关推荐

  1. python学习笔记(五)缩进

    python学习笔记(五)缩进 原作:http://www.cnblogs.com/vamei/archive/2012/05/29/2524706.html 笔记: #!/usr/bin/env p ...

  2. python学习笔记(五)---替换函数

    python学习笔记(五)-替换函数 replace()函数替换内容 用法: replace('需要替换的内容','替换后的内容',替换次数) 备:如果需要替换单引号需要加'\' 例子: str = ...

  3. python学习笔记(五岁以下儿童)深深浅浅的副本复印件,文件和文件夹

    python学习笔记(五岁以下儿童) 深拷贝-浅拷贝 浅拷贝就是对引用的拷贝(仅仅拷贝父对象) 深拷贝就是对对象的资源拷贝 普通的复制,仅仅是添加了一个指向同一个地址空间的"标签" ...

  4. 5岁自学python编程-python学习笔记(五岁以下儿童)深深浅浅的副本复印件,文件和文件夹...

    python学习笔记(五岁以下儿童) 深拷贝-浅拷贝 浅拷贝就是对引用的拷贝(仅仅拷贝父对象) 深拷贝就是对对象的资源拷贝 普通的复制,仅仅是添加了一个指向同一个地址空间的"标签" ...

  5. 《Python零基础快乐学习之旅》学习笔记4——基本输入与输出

    第4章 基本输入与输出 4.1 Python的辅助说明help() help()函数可以列出某一个Python的指令或函数的使用说明. >>> help(print) Help on ...

  6. Python学习笔记(五.数据分析 ——上)

    系列文章持续更新中- 文章目录 前言 一.相关性分析 A.获取股票价格 a.获取日K线的股票价格 b.获取每分钟的股票价格 B. 合并股票价格 C.股票价格相关性分析 二.假设检验 三.方差分析 A. ...

  7. python学习笔记(五)字符串函数二

    原文链接:http://blog.svenapps.com/post/python-xue-xi-bi-ji/python-xue-xi-bi-ji-wu-zi-fu-chuan-han-shu-er ...

  8. Python学习笔记(五)——正则表达式

    定义         正则表达式提供了功能强大.灵活又高效的方法来处理文本:快速分析大量文 本以找到特定的字符模式:提取.编辑.替换或删除文本字符串:将提取的字 符串添加到集合以生成报告.正则表达式广 ...

  9. python 输入输出转web_云计算开发学习笔记:Python3 输入和输出方式

    Python两种输出值的方式: 表达式语句和 print() 函数.第三种方式是使用文件对象的 write() 方法,标准输出文件可以用 sys.stdout 引用. 如果你希望输出的形式更加多样,可 ...

最新文章

  1. arm汇编学习(二)
  2. FFmpeg的添加logo,去logo
  3. 成功解决RuntimeWarning: invalid value encountered in double_scalars
  4. 2017-2018-1 20155330 《信息安全系统设计基础》第11周学习总结
  5. 2021暑假每日一题 【week1 完结】
  6. Python爬取网站用户手机号_设计师的福利,python爬取素材网站
  7. VOC数据集图片标注工具labelImg简介、安装、使用方法详细攻略(windows) PyQt4、PyQt5
  8. Linux安装phpMyAdmin详细步骤
  9. ckpt下载 deeplabv3_OpenCV4 部署DeepLabv3+模型
  10. docker 搭建nginx php mysql_docker搭建nginx+mysql+php
  11. 6-2 顺序表基本操作 (10 分)
  12. 卓有成效的管理者—第七章 有效的决定
  13. 苹果录屏没声音_苹果手机扬声器没声音是怎么回事?
  14. 方法教程 | Python爬虫:爬取美女图片,看到了意想不到的场景美女图片
  15. 通过下面语句创建employee数据库和dept(部门表)、emp(员工表)、salgrade(工资等级表)34题
  16. 2021年12月13日面试题网络知识基础
  17. Deep Unordered Composition Rivals Syntactic Methods for Text Classification(简摘DAN模型)
  18. 基于SpringBoot+Vue的酒店管理系统(免费获取源码+项目介绍+运行介绍+运行截图+论文)
  19. PostgreSQL 获取所有库名、表名、字段名
  20. android 点击震动,Android 使用Vibrator服务实现点击按钮带有震动效果

热门文章

  1. 【Spring框架家族】Spring--Security权限控制密码加密
  2. springboot配置spring.profiles.active多环境支持
  3. 03-编写dao实现类方式
  4. 框架-.NET:Spring.Net
  5. 如何配置jenkins 与代理服务器吗?
  6. Django中url匹配规则的补充
  7. [转] hibernate Mysql 自增长 注解配置,表无关联的注解方式关联查询
  8. oc 中随机数的用法(arc4random() 、random()、CCRANDOM_0_1()
  9. 并行编程——工程实践
  10. python 基础笔记十一 - random模块