在前面几个章节中,咱们其实已经接触了 Python 的输入输出的功能。本章节咱们将具体介绍 Python 的输入输出。

输出格式美化

Python两种输出值的方式: 表达式语句和 print() 函数。

第三种方式是使用文件对象的 write() 方法,标准输出文件可以用 sys.stdout 引用。

如果阁下您希望输出的形式更加多样,可以使用 str.format() 函数来格式化输出值。

如果阁下您希望将输出的值转成字符串,可以使用 repr() 或 str() 函数来实现。

  • str(): 函数return 一个用户易读的表达形式。
  • repr(): 产生一个解释器易读的表达形式。

例如

>>> s = 'Hello, phlcsdn2023'>>> str(s)'Hello, phlcsdn2023'>>> repr(s)"'Hello, phlcsdn2023'">>> str(1/7)'0.14285714285714285'>>> x = 10 * 3.25>>> y = 200 * 200>>> s = 'x 的值为: ' + repr(x) + ',  y 的值为:' + repr(y) + '...'>>> print(s)x 的值为: 32.5,  y 的值为:40000...>>> #  repr() 函数可以转义字符串中的特殊字符... hello = 'hello, phlcsdn2023\n'>>> hellos = repr(hello)>>> print(hellos)'hello, phlcsdn2023\n'>>> # repr() 的参数可以是 Python 的任何对象... repr((x, y, ('Google', 'phlcsdn2023')))"(32.5, 40000, ('Google', 'phlcsdn2023'))"

这里有两种方式输出一个平方与立方的表:

>>> for x in range(1, 11):...     print(repr(x).rjust(2), repr(x*x).rjust(3), end=' ')...     # 注意前一行 'end' 的使用...     print(repr(x*x*x).rjust(4))...1   1    12   4    83   9   274  16   645  25  1256  36  2167  49  3438  64  5129  81  72910 100 1000>>> for x in range(1, 11):...     print('{0:2d} {1:3d} {2:4d}'.format(x, x*x, x*x*x))...1   1    12   4    83   9   274  16   645  25  1256  36  2167  49  3438  64  5129  81  72910 100 1000

**注意:**在第一个例子中, 每列间的空格由 print() 添加。

这个例子展示了字符串对象的 rjust() 方法, 它可以将字符串靠右, 并在左边填充空格。

还有类似的方法, 如 ljust() 和 center()。 这些方法并不会写任何东西, 它们仅仅return 新的字符串。

另一个方法 zfill(), 它会在数字的左边填充 0,请在输出结果查看

>>> '12'.zfill(5)'00012'>>> '-3.14'.zfill(7)'-003.14'>>> '3.14159265359'.zfill(5)'3.14159265359'

str.format() 的基本使用如下:

>>> print('{}网址: "{}!"'.format('phlcsdn2023教程', 'blog.csdn.net/phlcsdn2023'))phlcsdn2023教程网址: "blog.csdn.net/phlcsdn2023!"

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

在括号中的数字用于指向传入对象在 format() 中的位置,请在输出结果查看

>>> print('{0} 和 {1}'.format('Google', 'phlcsdn2023'))Google 和 phlcsdn2023>>> print('{1} 和 {0}'.format('Google', 'phlcsdn2023'))phlcsdn2023和 Google

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

>>> print('{name}网址: {site}'.format(name='phlcsdn2023教程', site='blog.csdn.net/phlcsdn2023'))phlcsdn2023教程网址: blog.csdn.net/phlcsdn2023

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

>>> print('站点列表 {0}, {1}, 和 {other}。'.format('Google', 'phlcsdn2023', other='Taobao'))站点列表 Google, phlcsdn2023, 和 Taobao。

!a (使用 ascii()), !s (使用 str()) 和 !r (使用 repr()) 可以用于在格式化某个值之前对其进行转化:

>>> import math>>> print('常量 PI 的值近似为: {}。'.format(math.pi))常量 PI 的值近似为: 3.141592653589793。>>> print('常量 PI 的值近似为: {!r}。'.format(math.pi))常量 PI 的值近似为: 3.141592653589793。

非必输项 : 和格式标识符可以跟着字段名。 这就允许对值进行更好的格式化。 下面的例子将 Pi 保留到小数点后三位:

>>> import math>>> print('常量 PI 的值近似为 {0:.3f}。'.format(math.pi))常量 PI 的值近似为 3.142。

在 : 后传入一个整数, 可以保证该域至少有这么多的宽度。 用于美化表格时很有用。

>>> table = {'Google': 1, 'phlcsdn2023': 2, 'Taobao': 3}>>> for name, number in table.items():...     print('{0:10} ==> {1:10d}'.format(name, number))... Google     ==>          1phlcsdn2023==>          2Taobao     ==>          3

如果阁下您有一个很长的格式化字符串, 而阁下您不想将它们分开, 那么在格式化时通过变量名而非位置会是很好的事情。

最简单的就是传入一个字典, 然后使用方括号 [] 来访问键值 :

>>> table = {'Google': 1, 'phlcsdn2023': 2, 'Taobao': 3}>>> print('phlcsdn2023: {0[phlcsdn2023]:d}; Google: {0[Google]:d}; Taobao: {0[Taobao]:d}'.format(table))phlcsdn2023: 2; Google: 1; Taobao: 3

也可以通过在 table 变量前使用 ** 来实现相同的功能:

>>> table = {'Google': 1, 'phlcsdn2023': 2, 'Taobao': 3}>>> print('phlcsdn2023: {phlcsdn2023}; Google: {Google:d}; Taobao: {Taobao:d}'.format(**table))phlcsdn2023: 2; Google: 1; Taobao: 3

旧式字符串格式化

% 操作符也可以实现字符串格式化。 它将左边的参数作为类似 sprintf() 式的格式化字符串, 而将右边的代入, 然后return 格式化后的字符串. 例如:

>>> import math>>> print('常量 PI 的值近似为:%5.3f。' % math.pi)常量 PI 的值近似为:3.142。

因为 str.format() 是比较新的函数, 大多数的 Python 代码仍然使用 % 操作符。但是因为这种旧式的格式化最终会从该语言中移除, 应该更多的使用 str.format().


读取键盘输入

Python 提供了 [input() 内置函数]从标准输入读入一行文本,默认的标准输入是键盘。

实例 #!/usr/bin/python3str = input("请输入:");print ("阁下您输入的内容是: ", str)

这会产生如下的对应着输入的结果请在输出结果查看

请输入:phlcsdn2023教程阁下您输入的内容是:  phlcsdn2023教程

读和写文件

open() 将会return 一个 file 对象,基本语法格式如下:

open(filename, mode)
  • filename:包含了阁下您要访问的文件名称的字符串值。
  • mode:决定了打开文件的模式:只读,写入,追加等。所有可取值见如下的完全列表。这个参数是非强制的,默认文件访问模式为只读®。

不同模式打开文件的完全列表:

模式 描述
r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。
r+ 打开一个文件用于读写。文件指针将会放在文件的开头。
rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
w 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
w+ 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+ 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

很好的总结了这几种模式:

模式 r r+ w w+ a a+
+ + + +
+ + + + +
创建 + + + +
覆盖 + +
指针在开始 + + + +
指针在结尾 + +

以下实例将字符串写入到文件 foo.txt 中:

实例 #!/usr/bin/python3# 打开一个文件f = open("/tmp/foo.txt", "w")f.write( "Python 是一个非常好的语言。\n是的,的确非常好!!\n" )# 关闭打开的文件f.close()
  • 第一个参数为要打开的文件名。
  • 第二个参数描述文件如何使用的字符。 mode 可以是 ‘r’ 如果文件只读, ‘w’ 只用于写 (如果存在同名文件则将被删除), 和 ‘a’ 用于追加文件内容; 所写的任何数据都会被自动增加到末尾. ‘r+’ 同时用于读写。 mode 参数是非必输的; ‘r’ 将是默认值。

此时打开文件 foo.txt,显示如下:

$ cat /tmp/foo.txt Python 是一个非常好的语言。是的,的确非常好!!

文件对象的方法

本节中剩下的例子假设已经创建了一个称为 f 的文件对象。

f.read()

为了读取一个文件的内容,调用 f.read(size), 这将读取一定数目的数据, 然后作为字符串或字节对象return 。

size 是一个非必输的数字类型的参数。 当 size 被忽略了或者为负, 那么该文件的所有内容都将被读取并且return 。

以下实例假定文件 foo.txt 已存在(上面实例中已创建):

实例 #!/usr/bin/python3# 打开一个文件f = open("/tmp/foo.txt", "r")str = f.read()print(str)# 关闭打开的文件f.close()

执行以上程序,输出结果请在输出结果查看

Python 是一个非常好的语言。是的,的确非常好!!

f.readline()

f.readline() 会从文件中读取单独的一行。换行符为 ‘\n’。f.readline() 如果return 一个空字符串, 说明已经已经读取到最后一行。

实例 #!/usr/bin/python3# 打开一个文件f = open("/tmp/foo.txt", "r")str = f.readline()print(str)# 关闭打开的文件f.close()

执行以上程序,输出结果请在输出结果查看

Python 是一个非常好的语言。

f.readlines()

f.readlines() 将return 该文件中包含的所有行。

如果设置非必输参数 sizehint, 则读取指定长度的字节, 并且将这些字节按行分割。

实例 #!/usr/bin/python3# 打开一个文件f = open("/tmp/foo.txt", "r")str = f.readlines()print(str)# 关闭打开的文件f.close()

执行以上程序,输出结果请在输出结果查看

['Python 是一个非常好的语言。\n', '是的,的确非常好!!\n']

另一种方式是迭代一个文件对象然后读取每行:

实例 #!/usr/bin/python3# 打开一个文件f = open("/tmp/foo.txt", "r")for line in f:print(line, end='')# 关闭打开的文件f.close()

执行以上程序,输出结果请在输出结果查看

Python 是一个非常好的语言。是的,的确非常好!!

这个方法很简单, 但是并没有提供一个很好的控制。 因为两者的处理机制不同, 最好不要混用。

f.write()

f.write(string) 将 string 写入到文件中, 然后return 写入的字符数。

实例 #!/usr/bin/python3# 打开一个文件f = open("/tmp/foo.txt", "w")num = f.write( "Python 是一个非常好的语言。\n是的,的确非常好!!\n" )print(num)# 关闭打开的文件f.close()

执行以上程序,输出结果请在输出结果查看

29

如果要写入一些不是字符串的东西, 那么将需要先进行转换:

实例 #!/usr/bin/python3# 打开一个文件f = open("/tmp/foo1.txt", "w")value = ('blog.csdn.net/qq441540598', 14)s = str(value)f.write(s)# 关闭打开的文件f.close()

执行以上程序,打开 foo1.txt 文件:

$ cat /tmp/foo1.txt ('blog.csdn.net/qq441540598', 14)

f.tell()

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

f.seek()

如果要改变文件指针当前的位置, 可以使用 f.seek(offset, from_what) 函数。

from_what 的值, 如果是 0 表示开头, 如果是 1 表示当前位置, 2 表示文件的结尾,例如:

  • seek(x,0) : 从起始位置即文件首行首字符开始移动 x 个字符
  • seek(x,1) : 表示从当前位置往后移动x个字符
  • seek(-x,2):表示从文件的结尾往前移动x个字符

from_what 值为默认为0,即文件开头。下面给出一个完整的例子:

>>> f = open('/tmp/foo.txt', 'rb+')>>> f.write(b'0123456789abcdef')16>>> f.seek(5)     # 移动到文件的第六个字节5>>> f.read(1)b'5'>>> f.seek(-3, 2) # 移动到文件的倒数第三字节13>>> f.read(1)b'd'

f.close()

在文本文件中 (那些打开文件的模式下没有 b 的), 只会相对于文件起始位置进行定位。

当阁下您处理完一个文件后, 调用 f.close() 来关闭文件并释放系统的资源,如果尝试再调用该文件,则会抛出异常。

>>> f.close()>>> f.read()Traceback (most recent call last):File "<stdin>", line 1, in ?ValueError: I/O operation on closed file

当处理一个文件对象时, 使用 with 关键字是非常好的方式。在结束后, 它会帮阁下您正确的关闭文件。 而且写起来也比 try - finally 语句块要简短:

>>> with open('/tmp/foo.txt', 'r') as f:...     read_data = f.read()>>> f.closedTrue

文件对象还有其他方法, 如 isatty() 和 trucate(), 但这些通常比较少用。


pickle 模块

python的pickle模块实现了基本的数据序列和反序列化。

通过pickle模块的序列化操作咱们能够将程序中运行的对象信息保存到文件中去,永久存储。

通过pickle模块的反序列化操作,咱们能够从文件中创建上一次程序保存的对象。

基本接口:

pickle.dump(obj, file, [,protocol])

有了 pickle 这个对象, 就能对 file 以读取的形式打开:

x = pickle.load(file)

**注解:**从 file 中读取一个字符串,并将它重构为原来的python对象。

file: 类文件对象,有read()和readline()接口。

实例 1 #!/usr/bin/python3import pickle# 使用pickle模块将数据对象保存到文件data1 = {'a': [1, 2.0, 3, 4+6j],'b': ('string', u'Unicode string'),'c': None}selfref_list = [1, 2, 3]selfref_list.append(selfref_list)output = open('data.pkl', 'wb')# Pickle dictionary using protocol 0.pickle.dump(data1, output)# Pickle the list using the highest protocol available.pickle.dump(selfref_list, output, -1)output.close()
实例 2 #!/usr/bin/python3import pprint, pickle#使用pickle模块从文件中重构python对象pkl_file = open('data.pkl', 'rb')data1 = pickle.load(pkl_file)pprint.pprint(data1)data2 = pickle.load(pkl_file)pprint.pprint(data2)pkl_file.close()

本专栏所有文章

第1章 Python3 教程 第2章 Python3 简介教程
第3章 Python3 环境搭建教程 第4章 Python3 VScode教程
第5章 Python3 基础语法教程 第6章 Python3 基本数据类型教程
第7章 Python3 数据类型转换教程 第8章 Python3 推导式教程
第9章 Python3 解释器教程 第10章 Python3 注释教程
第11章 Python3 运算符教程 第12章 Python3 数字(Number)教程
第13章 Python3 字符串教程 第14章 Python3 列表教程
第15章 Python3 元组教程 第16章 Python3 字典教程
第17章 Python3 集合教程 第18章 Python3 编程第一步教程
第19章 Python3 条件控制教程 第20章 Python3 循环语句教程
第21章 Python3 迭代器与生成器教程 第22章 Python3 函数教程
第23章 Python3 数据结构教程 第24章 Python3 模块教程
第25章 Python3 输入和输出教程 第26章 Python3 File教程
第27章 Python3 OS教程 第28章 Python3 错误和异常教程
第29章 Python3 面向对象教程 第30章 Python3 命名空间/作用域教程
第31章 Python3 标准库概览教程 第32章 Python3 实例教程
第33章 Python 测验教程 第34章 Python3 正则表达式教程
第35章 Python3 CGI编程教程 第36章 Python3 MySQL(mysql-connector)教程
第37章 Python3 MySQL(PyMySQL)教程 第38章 Python3 网络编程教程
第39章 Python3 SMTP发送邮件教程 第40章 Python3 多线程教程
第41章 Python3 XML 解析教程 第42章 Python3 JSON教程
第43章 Python3 日期和时间教程 第44章 Python3 内置函数教程
第45章 Python3 MongoDB教程 第46章 Python3 urllib教程
第47章 Python uWSGI 安装配置教程 第48章 Python3 pip教程
第49章 Python3 operator教程 第50章 Python math教程
第51章 Python requests教程 第52章 Python random教程
第53章 Python3 os.replace() 方法教程

寄语

本文有 phlcsdn2023 原创,欢迎点赞、转载,博客地址:https://blog.csdn.net/phlcsdn2023

  • 理想是一粒种子,只有播种在现实的土地上,才能萌发出希望的幼苗。
  • 生命于我们瞬息万变,应该有这样的准备,这想法不是消极,也不是推卸责任,而是珍惜生命,更积极面对有限的人生的开始。
  • 无论生命让你面对多大困难,不让自己怨愤是非常重要的,因为当你不能嘲笑自己和人生,那你就是失去希望。
  • 梦;总不够漫长可我需要梦想。情;总让人受伤可我还念念不忘。雨;下得再漂亮可我还喜欢阳光。虽不在身旁可我从未将你遗忘…亲爱的朋友,最近好吗?
  • 人们说生命是很短促的,我认为是他们自己使生命那样短促的。由于他们不善于利用生命,所以他们反过来抱怨说时间过得太快;可是我认为,就他们那种生活来说,时间倒是过得太慢了。

第25章 Python3 输入和输出教程相关推荐

  1. 第31章 Python3 标准库概览教程

    操作系统接口 os模块提供了不少与操作系统相关联的函数. >>> import os>>> os.getcwd() # return 当前的工作目录'C:\\Pyt ...

  2. 分享一下python入门知识点-输入与输出教程,不喜勿喷

    输入的函数形式共有两种 print( ), print ' ' 输入的函数是print ' ' 这种格式中各个变量是由逗号拼接起来的,比如下面前两行代码. Print函数还可以将字符与计算结果一起打印 ...

  3. 2. Python3输入与输出

    数据的输入和输出操作是计算机最基本的操作,本节只研究基本的输入与输出,基本输入是指从键盘上输入数据的操作,基本输出是指屏幕上显示输出结果的操作. 2.1基本输入和输出 常用的输入与输出设备有很多,如摄 ...

  4. 《C++ Primer Plus》第17章:输入、输出和文件(2)

    使用 cout 进行输出 正如前面指出,C++将输出看作字节流(根据实现和平台的不同,可能是8位.16位或32位的字节,但都是字节),但在程序中,很多数据被组织成比字节更大的单位.例如,int类型由1 ...

  5. 《C++ Primer Plus》第17章:输入、输出和文件(6)

    总结 流是进出程序的字节流.缓冲区是内存中的临时存储区域,是程序与文件或其他 I/O 设备之间的桥梁.信息在缓冲区和文件之间传输时,将使用设备(如磁盘驱动器)处理效率最高的尺寸以大块数据的方式进行传输 ...

  6. Python3 输入和输出

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

  7. C语言笔记 第三章 键盘输入与输出

    文章目录 1 printf() 1.1 整型 1.2 字符型 1.3 浮点型 1.4 其他 1.4.1 标志 1.4.2 输出最小宽度 1.4.3 精度 1.4.4 类型长度 1.5 转义字符 2 s ...

  8. python3 输入输出_21.Python3 输入和输出

    [TOC] ## 输出格式美化 Python两种输出值的方式: 表达式语句和 print() 函数. 第三种方式是使用文件对象的 write() 方法,标准输出文件可以用 sys.stdout 引用. ...

  9. 【C基础练习题】第一章:输入和输出 | 基础练习题 | 提供题解

    目录 第一题:你好世界 第二题:输出用户输入的三个值 第三题:已知半径求圆周长和圆面积 第一题:你好世界

最新文章

  1. 用ElasticSearch搭建自己的搜索和分析引擎
  2. 委托、lamda表达式..委托概念-匿名函数-泛型委托-Lamda表达式-多播委托
  3. linux挂载硬盘简书,linux|挂载硬盘及分区
  4. python打开一个文件-python,一读取文件open()
  5. centos(linux) 下如何查看端口占用情况及杀死进程
  6. optee3.16.0 qemu_v8的环境搭建篇(ubuntu20.10)
  7. anaconda如何做python笔记_Anaconda常用命令笔记
  8. 20135231 —— 第六周任务总结报告
  9. 小米刷第三方recovery_小米平板4/Plus LTE版本开启电话功能
  10. ElasticSearch 快照 备份、恢复数据
  11. 萧县机器人_全国总决赛第一名!萧县杨楼的这位学生厉害了
  12. Java开源框架 iBase4J 搭建笔记
  13. 实用是计算机知识,实用电脑知识
  14. C++变量前面加下划线的含义
  15. 2018.11.27 元器件选型(1)- 蜂鸣器,电池,电阻,电容,电感
  16. 为什么ios比android流畅
  17. Maven实战 4 -- Maven核心概念
  18. 字符编码那些事--彻底理解掌握编码知识
  19. 西安电子科技大学光学工程/电子信息(专业课代码851)考研经验分享
  20. 数据科学学习之探索性数据分析(EDA)

热门文章

  1. 安装好xp系统后没网络连接服务器,本地连接呢?xp系统.设备管理器中显示网卡安装正常.没叹号没问号 爱问知识人...
  2. Linux根据流水号查找日志,如向查找约考流水号
  3. 应用无法更新,新版本的的版本号(VersionCode)低于之前的版本
  4. Vue学习教程1--Vue核心
  5. 宝剑赠英雄 - 任意字段\条件等效查询, 探探PostgreSQL多列展开式B树
  6. Spark中POJO与Dataset相互转换
  7. oracle+12514+C#,Oracle10g ORA-12514
  8. php问道茶具源代码,php开发最新进存销软件库存仓库管理系统网页版进销存正版套中装.doc...
  9. mysql 删除数据慢
  10. 马云在深圳网商论坛的演讲