NO.1 输入输出
本文是学习Python速查手册的笔记,如有不对请指教
一、input( )函数
1. 语法
input(prompt)
input()函数接受所有用户输入内容,返回一个字符串。
在python3.7中所有的输入都是作为字符串被读取的,要改变类型需要对字符串进行类型转换。
tips:ord()函数将字符转换为对应的ASCII码
num = int(input("输入一个数:"))
print(num)
print(type(num))
n = input("请输入:")
value = ord(n)
print(n + "的ASCII码为",value)
print(type(n))
输出结果:
输入一个数:1
1
<class 'int'>
请输入:2
2的ASCII码为 50
<class 'str'>
2. 常用方法
2.1 常用输入
prompt可以为空(不提示任何信息)
也可以加转义字符(\n表示换行)
2.2 去除输入的非法字符
使用字符串函数strip()、lstrip()、rstrip()方法
方法 | 作用 |
---|---|
strip() | 去除两边字符 |
lstrip() | 去除左边字符 |
rstrip() | 去除右边字符 |
tips:传入的是一个字符数组,编译器去除两端所有相应的字符,直到没有匹配的字符。一般使用空格较多。
#实际上是删除两边开始与['s','a','y']内匹配的所有字符
#直到匹配不到停止
theString = 'saaaay yes no yaaaass'
print(theString.strip('say'))
print(theString.strip('say '))#say后面有空格
print(theString.lstrip('say'))
print(theString.rstrip('say'))
输出结果:
yes no
es no
yes no yaaaass
saaaay yes no
2.3 多数据输入
1.使用字符串split()方法进行分割
方法 | 作用 |
---|---|
split() | 通过指定分隔符对字符串进行切片 |
如果参数 num 有指定值,则分隔 num+1 个子字符串
a,b,c = input("输入3个字符,用逗号分隔:\n").split(",")#不限定输入类型
m,n = map(int,input("输入2个数字,用空格分隔:").split())#限定int类型
print(a,b,c)
print(m,n)
结果:
输入3个字符,用逗号分隔:
q,w,e
输入2个数字,用空格分隔:1 2
q w e
1 2
#有限定时输入若错误返回ValueError
map()方法是一种函数-值的映射
2.使用循环实现一行多值输入
sum = 0
for i in input("请输入:用空格分隔:\n").split(" "):
sum += int(i)
print(sum)
结果:
请输入:用空格分隔:
1 2 3 4 5
15
2.4 强制转换输入(含字母大小写方法)
1.int(),float(),str()等强制转换类型
n = input("输入1:")
int(n)
print(type(n))
m = int(input("输入2:"))
print(type(m))
结果:
输入1:1
<class 'str'>
输入2:2
<class 'int'>
2.字母大小写转换
方法 | 作用 |
---|---|
upper() | 字符串全大写 |
capitalize() | 字符串首字母大写 |
title() | 字符串每个单词首字母大写 |
lower() | 字符串全小写 |
words = "zhan lang"
print(words.title())
print(words.capitalize())
print(words.upper())
结果:
Zhan Lang
Zhan lang
ZHAN LANG
2.5 对输入数据验证
方法 | 作用 |
---|---|
isalnum() | 所有字符都是字母或者数字 |
isalpha() | 所有字符都是字母 |
isdigit() | 所有字符都是数字 |
isupper() | 所有字符都是大写字母 |
islower() | 所有字符都是小写字母 |
istitle() | 所有单词都是大写 |
isspace() | 所有字符都是空白、\t、\n、\r |
这些方法的返回值都是bool类型
if input('输入').isdigit():
print("xx")
else:
pass
字符串的方法简单但是有时不够灵活
所以可以使用ASCII码进行验证,配合ord()方法
二、open( )函数–文件
1. 语法
open(file, mode=‘r’, buffering=None, encoding=None, errors=None, newline=None, closefd=True)
file:必填参数,文件路径(引号括起来)
mode:可选参数,指定文件打开模式
值 | 说明 |
---|---|
r | open for reading (default) |
w | open for writing, truncating the file first |
x | create a new file and open it for writing |
a | open for writing, appending to the end of the file if it exists |
b | binary mode |
t | text mode (default) |
+ | open a disk file for updating (reading and writing) |
U | universal newline mode (deprecated) |
buffering:可选参数,指定读写文件的缓冲模式
encoding:文件编码模式,默认UTF-8
errors:遇到错误的报错严格程度
newline:区分换行符
closefd:传入file参数类型
2. 文件基本操作
首先明确,文件中操作都是依靠指针移动的
方法 | 作用 |
---|---|
read(size) | 读取整个文件并返回,size表示读取字符数,为0时默认读取整个文件 |
readline(size) | 读取某行文件内容并返回,size表示读取此行多少字符 |
readlines() | 读取每行文件内容并返回一个列表 |
write(obj) | 将内容obj写入文件 ,前提是w或a模式打开 |
tell() | 返回文件指针当前位置 |
seek(offset,whence) | 移动文件指针,offset指定移动字符个数,whence指定开始移动位置,0表示从头开始,1表示从当前位置开始,2表示中文件为开始,默认为0 |
close() | 关闭文件 |
fp = open(r"fff.txt")
print(fp.readline(4)+'\n***************')
print(fp.read()+'\n***************')
结果:
this
***************
is the first line
second line here
oh third
***************
#可以看到第二个read()不是从头开始,而是从指针位置开始
例:输出每行的前4个字符
fp = open(r"fff.txt")
while True:
line = fp.readline(4)
fp.readline()#读完此行指针自动调到下一行开始
#只用line = fp.readline(4)会连着读,只要一行读完才换行
print(line)
if line == '':
break
fp.close()
3 常用
3.1 with open语句
with open会有一个界限,所以超出with语句会自动关闭文件不需要调用close()方法
#打印每行
with open("fff.txt",'r') as f:
lines = f.readlines()
for line in lines:
print(line)
3.2 多个文件的读取操作
除了分别读取,赋值,打印,有一个更简单的方法,即zip()函数
f1 = open('file1.txt','r')
f2 = open('file2.txt','r')
f3 = open('file3.txt','r')
for i,j,k in zip(f1,f2,f3):#读取每个文件的内容
print(i,j,k)
3.3 读取一个文件夹下所有文件
遍历该目录下所有文件,循环读取每个文件的内容到列表,最后将每个文件的内容添加到列表。
import os #文件与系统操作模块
path = '.temp/mr'#相对地址
names = os.listdir(path)#获取目录下所有文件的名称列表
all = []
for item in names:
f = open(path+'/'+item)#读取每个文件
new = []#保存单个文件内容
for i in f:
new.append(i)
all.append(new)
for i in all:
print(i)#遍历输出
三、print( )函数
1.语法
print(value, … , sep=’ ‘, end=’\n’, file=None)
value:要输出的值,可以各种类型的变量
… :打印多个值用分隔",“打印出来默认是空格,字符串可以用”+"连接
sep:打印值时的分隔符,默认是空格
end:打印结尾的值,默认是换行符\n
tips:sep和end的参数必须是字符串
2.常用
2.1 输出字符串
print("字符串")#最常用
print(''' 123
456:--------------
789:--------------''')#三引号跨行输出
print("字符串1"+"字符串2")#连接字符串输出
print('2021','1','1',sep='-')#输出2021-1-1
使用chr()函数,可以根据ASCII码输出字符
print(chr(65))#结果是A
2.2 进制输出
x = 112
print("%o"%x)#使用操作符输出八进制数
print("%o %d %x"%(x,x,x))#使用操作符输出八,十,十六进制数
print(bin(x),oct(x),hex(x))#使用函数输出二,八,十六进制数
#综合输出进制数
print("int: {0:d}, hex: {0:x}, oct:{0:o}, bin: {0:b}".format(x))
print("int: {0:#o}".format(x))
结果:
160
160 112 70
0b1110000 0o160 0x70
int: 112, hex: 70, oct:160, bin: 1110000
int: 0o160
2.3 彩色输出
格式为
print(’\033[显示方式;前景色;背景色m 字符串 \033[0m’)
显示方法 | 意义 |
---|---|
0 | 终端默认设置 |
1 | 高亮 |
4 | 带下划线 |
5 | 闪烁 |
7 | 反白显示 |
8 | 不可见 |
前景色/背景色 | 颜色 |
---|---|
30/40 | 黑 |
31/41 | 红 |
32/42 | 绿 |
33/43 | 黄 |
34/44 | 蓝 |
35/45 | 紫红 |
36/46 | 青蓝 |
37/47 | 白色 |
print('\033[1;41;44m 字符串 \033[0m')
结果:
2.4 对齐输出和指定位数输出
方法 | 作用 |
---|---|
rjust(int,‘符号’) | 左对齐,数字代表字符串占位数,符号表示占位符号 |
ljust(int,‘符号’) | 右对齐 |
center(int,‘符号’) | 中间对齐 |
zfill(int) | 固定位数输出 |
format方法详解见字符串章节
2.5 标准输入sys.stdin和标准输出sys.stout.write()
略