前面几章介绍了一些常用的输入输出,本文将具体介绍Python的输入和输出
一、输出格式美化
Python两种输出值的方式: 表达式语句
和print()
函数。
第三种方式是使用文件对象的write()
方法,标准输出文件可以用sys.stdout
引用。
如果你希望输出的形式更加多样,可以使用str.format()
函数来格式化输出值。
如果你希望将输出的值转成字符串,可以使用repr()
或str()
函数来实现:
- str():返回一个用户易读的表达形式
- repr():返回一个解释器易读的表达形式,可以转义字符串中的特殊字符,参数可以是python中的任何对象
例子:
for x in range(1, 5):
print(repr(x).rjust(1), repr(x * x).rjust(2), repr(x * x * x).rjust(3))
输出:
1 1 1
2 4 8
3 9 27
4 16 64
这个例子展示了字符串对象的rjust()
方法, 它可以将字符串靠右, 并在左边填充空格。还有类似的方法, 如ljust()
和center()
。 这些方法并不会写任何东西, 它们仅仅返回新的字符串。另一个方法zfill()
, 它会在数字的左边填充 0
# 输出00010
print("10".zfill(5))
- str.format()基本使用
# 输出:翠花你好!
print('{}你好!'.format("翠花"))
括号及其里面的字符 (称作格式化字段) 将会被 format() 中的参数替换。在括号中的数字用于指向传入对象在 format() 中的位置
# 输出:小明你好!翠花你也好
print('{0}你好!{1}你也好'.format("小明", "翠花"))
如果使用了关键字参数,那么传值需要指定对应的参数
# 输出:小花你好
print('{name}你好'.format(name='小花'))
!a'
(使用ascii()
), '!s'
(使用str()
) 和'!r'
(使用repr()
) 可以用于在格式化某个值之前对其进行转化
# 输出:'小花'你好
print('{!r}你好'.format('小花'))
二、旧式字符串格式化
操作符也可以实现字符串格式化。 它将左边的参数作为类似sprintf()
式的格式化字符串, 而将右边的代入, 然后返回格式化后的字符串
# 输出:你好小明
print('你好%s' % "小明")
三、读取键盘的输入
提供了input()
内置函数从标准输入读入一行文本,默认的标准输入是键盘。input()
也可以接收一个Python表达式作为输入,并将运算结果返回
content = input("请输入:")
print("您输入的内容是:", content)
输出:
请输入:你好
您输入的内容是: 你好
四、读和写文件
open()
会返回一个file对象,基本语法为:open(filename, mode)
- filename:文件名称或者字符串值
- mode:打开文件的模式:只读、读写、追加等
模式 | 描述 |
---|---|
r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式 |
rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头 |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头 |
rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头 |
w | 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件 |
wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件 |
w+ | 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件 |
wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入 |
ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入 |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写 |
ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写 |
大概为:
模式 | r | r+ | w | w+ | a | a+ |
---|---|---|---|---|---|---|
读 | + | + | + | + | ||
写 | + | + | + | + | + | |
创建 | + | + | + | + | ||
覆盖 | + | + | ||||
指针在开始 | + | + | + | + | ||
指针在结尾 | + | + |
案例:
file1 = open("C:/Program Files/test.txt", "w")
file1.write("测试读写文件")
file1.close()
五、文件对象的方法
1、f.readline()
f.readline() 会从文件中读取单独的一行。换行符为 'n'。f.readline() 如果返回一个空字符串, 说明已经已经读取到最后一行
file1 = open("C:/Program Files/test.txt", "r")
content = file1.readline()
print(content)
2、f.readlines()
f.readlines()
将返回该文件中包含的所有行。如果设置可选参数sizehint
, 则读取指定长度的字节, 并且将这些字节按行分割
file1 = open("C:/Program Files/test.txt", "r")
content = file1.readlines()
print(content)
3、f.write()
f.write(string) 将 string 写入到文件中, 然后返回写入的字符数
file1 = open("C:/Program Files/test.txt", "w")
writeNum = file1.write("测试读写文件")
print(writeNum)
file1.close()
4、f.tell()
f.tell() 返回文件对象当前所处的位置, 它是从文件开头开始算起的字节数
5、f.seek()
如果要改变文件当前的位置, 可以使用f.seek(offset, from_what)
函数。from_what
的值, 如果是0
表示开头, 如果是1
表示当前位置,2
表示文件的结尾
- seek(x,0):从起始位置即文件首行首字符开始移动 x 个字符
- seek(x,1):表示从当前位置往后移动x个字符
- seek(-x,2):表示从文件的结尾往前移动x个字符
案例:
file1 = open("C:/Program Files/test.txt", "w+")
writeNum = file1.write('测试读写文件')
file1.seek(4)
# 输出:读
print(file1.read(1))
6、f.close()
在文本文件中 (那些打开文件的模式下没有b
的), 只会相对于文件起始位置进行定位。当你处理完一个文件后, 调用 f.close() 来关闭文件并释放系统的资源,如果尝试再调用该文件,则会抛出异常
五、pickle模块
python的pickle
模块实现了基本的数据序列和反序列化。通过pickle
模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储。通过pickle
模块的反序列化操作,我们能够从文件中创建上一次程序保存的对象
案例:
- 写入文件
必填参数file表示obj要写入的文件对象,file必须以二进制可写模式打开,即“wb”
a = {"name": "tom"}
file1 = open("C:/Program Files/test.txt", "wb")
# 将数据保存到文件中
pickle.dump(a, file1)
file1.close()
- 读取文件
必填参数file必须以二进制可读模式打开,即“rb”,其他都为可选参数
file1 = open("C:/Program Files/test.txt", "rb")
load = pickle.load(file1)
print(load)
本文到此就结束了,如果发现有误请在下方评论