学Python记笔记_输入输出——文件_r+、w+、a+的区别_输入多数字空格分隔_省略方括号输出列表_打印转义字符_保留位数

115 阅读5分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

一、输入

1、标准输入

内置函数input(string)提供从默认标准输入——从键盘读取一行文本

函数返回值是输入的文本,str对象

参数string为提示文本,str对象,可选

str = input("Please input:")

回车结束输入

单行输入多数字,以空格分隔

numbers = list(map(int,input().split(" ")))
print(numbers)

2、文件

Ⅰ、打开文件

内置函数open(filename,mode,encoding=)提供打开文件功能

函数返回值是打开的文件,file对象

参数filename为文件名称,str对象,包括文件名+后缀,默认路径同当前.py文件 参数mode为操作模式,str对象,可选 参数encoding为编码类型,str对项,可选

file = open("text.txt","r+",encoding="gbk")

只有选对了mode才能进行有关读写操作

主要mode参数模式描述
r只读 (默认)
读取存在的文件
w覆盖写入
文件存在则覆盖原有内容,文件不存在则新建
a接续写入
文件存在则续写原有内容,文件不存在则新建
可选mode参数模式描述
b指定为二进制格式操作
+读写模式*

r+、w+、a+的区别

mode 文件存在性 文件指针位置
r+ 必须存在 开头 从头读取 从头覆盖写入
w+ 不受限 开头 从头读取 从头覆盖写入
a+ 不受限 末尾 末尾读取 末尾接续写入

Ⅱ、从文件读取

内置函数file.read(size)、file.readline()、file.readlines(sizehint)提供读取功能

  • file.read(size):

函数返回值是读取文本,str对象

参数size为读取字符数,int对象,可选,若省略或为负则为读取全部

  • file.readline():

函数返回值是读取至换行符“\n”之前的单行文本,str对象

  • file.readlines(sizehint):

函数返回值是读取所有行,str对象

参数sizehint为指定字节长度,int对象

若返回值为None则表示读取完毕

Ⅲ、写入文件

内置函数file.write(string)提供写入文件功能

函数返回值是写入字符数,int对象

参数string为待写入文本,str对象

Ⅳ、移动文件指针

内置函数file.seek(offset,from)提供移动文件指针功能

函数返回值是当前指针位置,表示从头开始的字节数,int对象

参数offset为移动字符数,int对象,正值表示向后移动,负值表示向前移动 参数from为移动的基准点,int对象,可选

参数from描述
0文件开头 (默认)
1当前位置
2文件末尾

Ⅴ、当前指针位置

内置函数file.tell()提供查询当前指针位置功能

函数返回值是当前指针位置,表示从头开始的字节数,int对象

Ⅵ、关闭文件

内置函数file.close()提供关闭文件功能

函数返回值是None

处理文件有始有终,切记关闭文件

良好的处理文件习惯

为了避免未及时关闭文件,造成未知错误,请使用with关键字,它将自动关闭文件

with open("text.txt" , "w+") as f:
	f.write("123")
	str = f.read()

二、输出

1、标准输出

内置函数print(string1,string2,end=,sep=,)提供对象输出

参数string为输出对象,可选 常用参数end为结尾输出符,可选,默认为换行符 常用参数sep为多个输出对象的分隔符,可选,默认为空格

a = 5
b = "a"
print(a,b,end="",sep="\t")

结尾不换行令end="" 要输出换行符可以不提供参数,即print()

小试pprint

pprint.pprint()能够规范输出的格式

from pprint import pprint
a = {
    "nihao":"hello",
    "xiexie":"thanks",
    "shuben":"books",
    "diannao":"computers"
}
b = (2,4,6)
c = "hello"
d = [a,b,c]

pprint(d)

观察输出,相较于print(),格式更整齐

省略方括号单行输出列表

某些情况需要输出列表,通常有两种思路:

a = [1,2,3]
for i in a:
    print(i,end=" ")

a = [1,2,3]
print(*a,end="")

以文本输出转义字符

若字符串有转义字符,我们想以文本的形式输出,只用print(string)会将转义字符表达

a = "qwe\n"
print(a)

使用repr(string)可以不表达转义字符而以文本形式输出

a = "qwe\n"
print(repr(a))

2、str.format(string)美化输出

内置函数str.format(string)提供美化输出功能

函数返回值是美化后的字符串,str对象

参数string是待美化的字符串,str对象

age = 15
grade = 9

print('My age is {} and grade is {}'.format(age,grade))

类比C语言的%d、%c,前面的花括号会被后面的变量所替换

默认顺序同参数传入顺序 改变顺序可以在花括号内添加序号,默认第一个参数为0号

age = 15
grade = 9

print('My age is {1} and grade is {0}'.format(grade,age))

或给变量命名

print('My age is {age} and grade is {grade}'.format(grade=9,age=15))

可以设定默认值

print('My age is {age} and grade is {}'.format(9,age=15))

以上方法可以混合使用

数字的常用格式化输出

四舍五入保留小数

print('I have {:.2f} yuan'.format(14.5))

print('PI is {:.2f}'.format(3.141))

补足空位

print('I am No.{:03d}'.format(1))

print('It is {:.02f}'.format(1))

替代str.format——Python3.6+的f-sting

age = 15
grade = 9

print(f'My age is {grade} and grade is {age}')

四舍五入保留小数

print(f'I have {14.5:.2f} yuan')

import math
print(f'PI is {math.pi:.2f}')

补足空位

print(f'I am No.{1:03d}')

print(f'It is {1:.02f}')

三、小试数据的序列化和反序列化——pickle

为什么要使用pickle? 将程序的对象信息永久存储到文件,并可以重构之前存储的对象

文件要求: 一般后缀为pkl,是类文件对象,有read()、readline()接口

1、序列化操作

import pickle
a = 5
with open("data.pkl","wb") as f:
	pickle.dump(a,f)

函数pickle.dump(obj,file,[,protocol])提供序列化功能

参数obj为变量名 参数file为存储到的pkl文件,file对象

2、反序列化操作

import pprint,pickle
with open("data.pkl","rb") as f:
	a = pickle.load(f)
	pprint.pprint(a)

函数pickle.load(file)提供反序列化功能

参数file为读取的pkl文件,file对象

pprint为规范格式输出,使得输出整齐易读

欢迎在评论区留言 感谢浏览