第15天:Python 输入输出

在前几篇文章中,我们其实已经接触了 Python 的输入输出功能,本篇文章中我们再来详细学习一下。

1 格式化输出

Python 输出值的方式有两种:表达式语句和 print 函数(文件对象的输出使用 write 方法,标准文件输出可以参考 sys.stdout ,详细文档:https://docs.python.org/zh-cn/3/faq/extending.html#how-do-i-catch-the-output-from-pyerr-print-or-anything-that-prints-to-stdout-stderr)。

如果我们想要将输出的值转成字符串,可以使用 repr() 或 str() 函数来实现,其中 repr() 函数产生一个解释器易读的表达形式,str() 函数返回一个用户易读的表达形式。

如果我们不只是想打印使用空格分隔的值,而是想对输出进行格式化控制,可以采用两种方式:一种是自己处理整个字符串,另一种是采用 str.format() 方式,下面介绍下 str.format() 的使用。

1)基本使用

>>> print('{}网址:"{}!"'.format('Python技术', 'www.justdopython.com'))Python技术网址:"www.justdopython.com!"

括号及其里面的字符 (称作格式化字段) 将会被 format() 中的参数替换

2)在括号中的数字用于指向传入对象在 format() 中的位置

>>> print('{0} 和 {1}'.format('Hello', 'Python'))Hello 和 Python>>> print('{0} {1}'.format('Hello', 'Python'))Hello Python>>> print('{1} {0}'.format('Hello', 'Python'))Python Hello

3)如果在 format() 中使用了关键字参数,那么它们的值会指向使用该名字的参数

>>> print('{name}网址:{site}'.format(name='Python技术', site='www.justdopython.com'))Python技术网址:www.justdopython.com

4)位置及关键字参数可以任意的结合

>>> print('电商网站 {0}, {1}, {other}。'.format('淘宝', '京东', other='拼多多'))电商网站 淘宝, 京东, 拼多多。

5)用 ** 标志将字典以关键字参数的方式传入

>>> "repr() shows quotes: {!a}; str() doesn't: {!s}".format('test1', 'test2')"repr() shows quotes: 'test1'; str() doesn't: test2"

6)字段名后允许可选的 : 和格式指令

# 将 PI 转为三位精度>>> import math>>> print('The value of PI is approximately {0:.3f}.'.format(math.pi))The value of PI is approximately 3.142.

7)在字段后的 : 后面加一个整数会限定该字段的最小宽度

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

8)如果有个很长的格式化字符串,不想分割它可以传入一个字典,用中括号( [] )访问它的键;

>>> table = {'Sjoerd': 123, 'Jack': 456, 'Dcab': 789789789789}>>> print('Jack: {0[Jack]:d}; Sjoerd: {0[Sjoerd]:d}; ' 'Dcab: {0[Dcab]:d}'.format(table))Jack: 456; Sjoerd: 123; Dcab: 789789789789

还可以用 ** 标志将这个字典以关键字参数的方式传入。

>>> table = {'Sjoerd': 123, 'Jack': 456, 'Dcab': 789789789789}>>> print('Jack: {Jack:d}; Sjoerd: {Sjoerd:d}; Dcab: {Dcab:d}'.format(**table))Jack: 456; Sjoerd: 123; Dcab: 789789789789

2 读取键盘输入

Python 提供了 input() 内置函数从标准输入读入一行文本,默认的标准输入是键盘,input() 可以接收一个 Python 表达式作为输入,并将运算结果返回。示例如下:

>>> str = input("请输入:");>>> print ("输入的内容是: ", str)请输入:Hello Python你输入的内容是: Hello Python

3 文件读写

函数 open() 返回文件对象,通常的用法需要两个参数:open(filename, mode)。

第一个参数 filename 是要访问的文件名,第二个参数 mode 是描述如何使用该文件(可取值主要包括:'r' 读取文件;'w' 只是写入文件,已经存在的同名文件将被删掉;'a' 打开文件进行追加,自动添加到末尾;'r+' 打开文件进行读取和写入;'rb+' 以二进制格式打开一个文件用于读写...),mode 参数是可选的,默认为 'r'。

3.1 文件对象方法

  • read()

要读取文件内容,调用 read(size) ,size为可选参数。

>>> f = open('tmp.txt', 'r')>>> str = f.read(5)>>> print(str)>>> f.close()Hello
  • readline()

读取一行,换行符为 \n 。

>>> f = open('tmp.txt', 'r')>>> str = f.readline()>>> print(str)>>> f.close()
  • readlines()

读取文件中包含的所有行,可设置可选参数 size 。

>>> f = open('tmp.txt', 'r')>>> str = f.readlines(1)>>> print(str)>>> f.close()['Hello Python']
  • write()

write(string) 将 string 的内容写入文件。

>>> f = open('tmp.txt', 'w')>>> num = f.write('Hello Python')>>> print(num)>>> f.close()12
  • seek()

seek(offset, from_what) 改变文件当前的位置。offset 移动距离;from_what 起始位置,0 表示开头,1 表示当前位置,2 表示结尾,默认值为 0 ,即开头。

>>> f = open('tmp.txt', 'rb+')>>> f.write(b'0123456789abcdef')# 移动到文件的第 6 个字节>>> f.seek(5)>>> print(f.read())b'56789abcdef'
  • tell()

tell() 返回文件对象当前所处的位置,它是从文件开头开始算起的字节数。

>>> f = open('tmp.txt', 'r')>>> f.seek(5)>>> print(f.tell())5
  • close()

当你处理完一个文件后,调用 close() 来关闭文件并释放系统的资源。也可以使用 with 关键字处理文件对象,实现文件用完后自动关闭。

>>> with open('tmp.txt', 'r') as f: ... read_data = f.read()>>> print(f.closed)True

3.2 操作 json 格式数据

  • json.dumps(obj) 序列化,obj 转换为 json 格式的字符串;

  • json.dump(obj, fp) 序列化,将 obj 转换为 json 格式的字符串,将字符串写入文件;

  • json.loads(str) 反序列化,将 json 格式的字符串反序列化为一个 Python 对象;

  • json.load(fp) 反序列化,从文件中读取含 json 格式的数据,将之反序列化为一个 Python 对象。

>>> import json>>> data = {'id':'1', 'name':'jhon', 'age':12}>>> with open('t.json', 'w') as f:... json.dump(data, f)>>> with open("t.json", 'r') as f:... d = json.load( f)>>> print(d){'id': '1', 'name': 'jhon', 'age': 12}

总结

本节给大家介绍了 Python 输入输出,对 Python 工程师提供了支撑,能够根据实际情况选择合适的输入输出方式。

参考:

[1] https://docs.python.org/zh-cn/3/library/string.html#formatspec

[2] https://docs.pythontab.com/python/python3.5/inputoutput.html#tut-files

系列文章

第10天:Python类与对象

(0)

相关推荐

  • python文件操作

    python文件操作 目录: 1.文件读写 #文件两种类型(文本.二进制) 读写文本文件:read  全部读出,read(n) 一次读n  w:写   r:读 读写二进制文件(案例:读取图片.视频拷贝 ...

  • python菜鸟教程学习12:输入输出

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

  • python 通过exifread读取照片信息

    https://www.jb51.net/article/202842.htm python 通过exifread读取照片信息 import exifread import json import u ...

  • python 批量生成目录

    表白:黑白圣堂血天使,天剑鬼刀阿修罗.  讲解对象:/python 批量生成目录 作者:融水公子 rsgz Python3 教程 python教程 http://www.rsgz.top/post/9 ...

  • 15 个 Python 开源项目,使用 PyQt 做小型桌面应用!

    Python猫 4天前 以下文章来源于开源前哨 ,作者Lenskit [导语]:想制作属于自己的桌面应用程序吗?这有 15 个示例带你手把手入门. 简介 本次将介绍一个用 PyQt 框架和 Pytho ...

  • 15个 Python 高级库

    为什么我喜欢Python?对于初学者来说,这是一种简单易学的编程语言,另一个原因:大量开箱即用的第三方库,正是23万个由用户提供的软件包使得Python真正强大和流行. 在本文中,我挑选了15个最有用 ...

  • 【视频课】超15小时Python酷炫数据可视化课程,王圣元Python课又来了!

    Python是数据可视化的重要工具,本次我们联合<王的机器>公众号号主一起推出Python数据可视化进阶课程,下面请听介绍. 作者介绍 首先来介绍一下视频课作者,只有拥有原创能力的作者才可 ...

  • 详细比对 15 款 Python 编辑器,请择优选用!

    本文介绍了多个 Python IDE,并评价其优缺点 读者可以参考此文列举的 Python IDE 列表,选择适合自己的编辑器 写 Python 代码最好的方式莫过于使用集成开发环境(IDE)了.它们 ...

  • GitHub2019年4月最牛逼的15个python项目

    小帅b时不时会去Github逛逛,发现不错的资源就想着分享给公众号的读者们,下定决心了,为了让读者觉得关注我的公众号觉得有价值,以后小帅b每个月会把 GitHUb 上最牛逼的 15 个项目分享给大家, ...

  • GitHub 2019 年 5 月最牛逼的 15 个 python 项目

    为了让读者觉得关注我的公众号觉得有价值,以后小帅b每个月会把 GitHub 上最牛逼的 15 个项目分享给大家,大家各取所需,持续分享干货不易,大家多多"素质三连"哈,这次是 20 ...

  • GitHub2019年6月最牛逼的15个python项目

    转眼间,一个月又过去了,你又胖了吗?哈哈哈 每个月总有这么一次,小帅b给你搜罗 GitHub 上面这个月最牛逼的 15 (这次减2,且看且珍惜)个 Python 项目,是的,我不仅帅,还这么好人,大家 ...

  • 15 个让新手爱不释手的 Python 高级库

    译者:数据黑客 原文链接:https://medium.com/tech-explained/top-15-python-packages-you-must-try-c6a877ed3cd0 为什么我 ...

  • 15个最受欢迎的Python开源框架

    编辑推荐: 本文来源博客园,主要通过示例演示15个最受欢迎的Python开源框架,希望对您的学习有所帮助. 一.Django: Python Web应用开发框架 Django是一个开放源代码的Web应 ...