这一章主要是讲述程序展示其数据的一些方法,一般都是直接按照一定的格式输出在屏幕,或者写入到文件以便以后使用。按照一定格式的输出,在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 s
print str(s)
print repr(s) print str(math.pi)
print repr(math.pi)
结果如下:
可以看到:repr()在操作string字符串的时候增加了引号和反斜杠,而str是没有的。
现需要打印出1-10的1次方,2次方,3次方的值,如下所示:
按照以前的思维会怎么做呢?以我c++刚入门的功力写,貌似更搓,需要打印数值,再打印空格。。。。
python单纯的使用string类型的方法,可以这样实现:
for x in range(,):
print str(x).ljust(),str(x*x).ljust(),str(x*x*x).ljust()
ljust()是str模块内的一个方法,函数原型是: S.ljust(width[, fillchar]) -> string,在字符串的左边插入width个fillchar,默认fillchar是space。巧妙的实现了字符串后面空N格的需求,当然有左边,肯定有右边,也有中间,对应的方法是 str.ljust()
and str.center(),具体使用就不举例了。
如果使用str的format方法,貌似更简洁了:
for x in range(,):
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': , 'Jack': , 'Dcab': }
>>> for name, phone in table.items():
... print '{0:10} ==> {1:10d}'.format(name, phone)
...
Jack ==>
Dcab ==>
Sjoerd ==>
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 文本文件没有问题,但会损坏JPEG或EXE这样的二进制文件中的数据。在读写这些文件时一定要记得以二进制模式打开。在 Unix 平台上,在模式后面附加一个'b'也不会有坏处,这样可以用写好的文件访问代码来读写任何平台上的所有二进制文件。
得到文件句柄后,可以对文件进行读写操作,一次性读取read();一行一行读取readline(),不去掉换行符;写操作write();查询当前文件游标(偏移量)tell(),移动游标seek();read()函数内如果加整型参数,表示读取整数个byte。举例如下:
f = open('test.txt','r+')
print f
print 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()
print r.read()
print r.tell()
r.close()
运行结果:
17
None
5
6
在python中处理文件对象时使用with关键字是很好的做法。这样做的好处在于文件用完后会自动关闭,即使过程中发生异常也没关系。它还比编写一个等同的try-finally语句要短很多,如果需要读取文件内每一行,可以循环遍历文件对象来读取文件中的每一行。这是既省内存又非常快的简单代码。
with open('workfile','r') as f:
for line in f:
print line
print f.closed
运行结果:
0123456789abcdefg
True
5.4 使用json存储结构化数据
从文件中读写字符串并不是很难。数值就要多费点儿周折,因为read ()方法只会返回字符串,应将其传入int()这样的函数,就可以将'123'这样的字符串转换为对应的数值 123。当你想要保存更为复杂的数据类型,例如嵌套的列表和字典,手工解析和序列化它们将变得更复杂。Python 允许使用常用的数据交换格式JSON(JavaScript Object Notation)。标准模块json可以接受 Python 数据结构,并将它们转换为字符串表示形式;此过程称为序列化。从字符串表示形式重新构建数据结构称为反序列化。序列化和反序列化的过程中,表示该对象的字符串可以存储在文件或数据中,也可以通过网络连接传送给远程的机器。
这一章节,之前有专门总结过,再次就不墨迹了。可以点此链接进行查看: python对json的操作总结
python学习笔记系列----(五)输入和输出的更多相关文章
-
吴裕雄--天生自然python学习笔记:Python3 输入和输出
输出格式美化 Python两种输出值的方式: 表达式语句和 print() 函数. 第三种方式是使用文件对象的 write() 方法,标准输出文件可以用 sys.stdout 引用. 如果你希望输出的 ...
-
Python学习笔记(五)
Python学习笔记(五): 文件操作 另一种文件打开方式-with 作业-三级菜单高大上版 1. 知识点 能调用方法的一定是对象 涉及文件的三个过程:打开-操作-关闭 python3中一个汉字就是一 ...
-
python学习笔记(五岁以下儿童)深深浅浅的副本复印件,文件和文件夹
python学习笔记(五岁以下儿童) 深拷贝-浅拷贝 浅拷贝就是对引用的拷贝(仅仅拷贝父对象) 深拷贝就是对对象的资源拷贝 普通的复制,仅仅是添加了一个指向同一个地址空间的"标签" ...
-
PYTHON 100days学习笔记008-3:输入和输出
目录 Day008-03:Python3 输入和输出 1.输出格式美化 1.1 str.format()用法 1.2 旧式字符串格式化 2.读取键盘输入 3.读和写文件 4.文件对象的方法 4.1 f ...
-
python学习笔记系列----(一)python简介
一个月前,就按下决心要系统的学习下python了,虽然之前有学习过java,学习过c++,也能较为熟练的使用java做自动化测试看懂c++里的业务逻辑,但是实际上有那么多的东西自己还是不清楚,今天下定 ...
-
Python基础笔记系列五:元组
本系列教程供个人学习笔记使用,如果您要浏览可能需要其它编程语言基础(如C语言),why?因为我写得烂啊,只有我自己看得懂!! 元组 1)元组的结构和访问.使用方法和列表基本一致,区别主要有两点:1.使 ...
-
Python学习笔记系列
1.小甲鱼 python 学习系列笔记
-
python学习笔记系列----(八)python常用的标准库
终于学到了python手册的最后一部分:常用标准库.这部分内容主要就是介绍了一些基础的常用的基础库,可以大概了解下,在以后真正使用的时候也能想起来再拿出来用. 8.1 操作系统接口模块:OS OS模块 ...
-
Python学习笔记第五周
目录 一.基础概念 1.模块定义 2.包的定义 3.导入包的本质 4.导入模块的本质 5.导入方法 6.import的本质 7.导入优化 8.模块分类 9.标准库介绍 1.time与datetime ...
随机推荐
-
C++ 各种基本类型间的转换
常用的转换方法: 流转换 STL标准函数库中函数转换 流转换 流转换主要是用到了<sstream>库中的stringstream类. 通过stringstream可以完成基本类型间的转换, ...
-
使用Java实现简单串口通信
最近一门课要求编写一个上位机串口通信工具,我基于Java编写了一个带有图形界面的简单串口通信工具,下面详述一下过程,供大家参考 ^_^ 一: 首先,你需要下载一个额外的支持Java串口通信操作的jar ...
-
flex柱状图
柱状图的展现是通过flex自带的控件实现 控件解析:<mx:ColumnChart id = "columns" dataProvider = "{dataSour ...
-
[原]iOS自带社会化分享框架——Social.framework
http://m.blog.csdn.net/blog/u012189584/43236379 Social.framework支持的分享平台(打开手机上的“设置”即可看到)(如Twitter.fac ...
-
在Android开发中使用Ant 三:批量打包
批量打包最常用到的地方是进行产品推广时,为每个渠道打一个包.上一篇随笔中,介绍了怎样进行一次完整的打包,批量打包只要在此基础上做一次循环即可. 在打包之前要做两个准备工作,一个是读取渠道,一个是修改存 ...
-
这样就算会了PHP么?-9
PHP关于COOKIE的应用 <?php if (!isset($_COOKIE["visittime"])) { setcookie("visittime&quo ...
-
数据挖掘算法学习(三)NaiveBayes算法
算法简单介绍 NBC是应用最广的分类算法之中的一个.朴素贝叶斯模型发源于古典数学理论,有着坚实的数学基础,以及稳定的分类效率.同一时候,NBC模型所需预计的參数非常少,对缺失数据不太敏感,算法也比較简 ...
-
归并排序的go语言与C++实现对比
最近对go语言发生了兴趣,发现go语言语法简洁,非常适合算法的描述和实现,于是对归并排序进行了实现. 例子中需要排序的队列是长度为100的从100到1的数列,排序算法是正序排序,排序正确的话,结果应当 ...
-
PHP开发工程师应该具备那些技术能力
根据各大招聘网站的数据分析,2017年IT行业,其中从事软件开发和数据分析的毕业生的月薪最高.究其原因是因为随着互联网的不断发展,岗位人才稀缺,需求量大.那么如何快速的成为软件开发人员,比如PHP开发 ...
-
一次完整的HTTP网络请求过程详解
0. 前言 从我们在浏览器的地址栏输入http://blog.csdn.net/seu_calvin后回车,到我们看到该博客的主页,这中间经历了什么呢?简单地回答这个问题,大概是经历了域名解析.TC ...