一、文件操作
1、编码问题
gbk :汉字编码,cp936(另一个名字),汉字占2个字节
utf-8: unicode,汉字占3个字节
ascll码: Mac默认的编码
2、open函数
open(file,mode='r',......) #前面一个必备参数是输入文件,后面的mode是打开方式
3、相对路径和绝对路径
f=open('abc.txt','w') #在py文件旁边创建了一个txt文件,在文件的同一层创建文件,这边是相对路径
f=open('E:softwarepython3lucky.txt,'w') #具体到什么位置,这边是绝对路径
f是一个文件流(输入输出流)
4、文件的打开模式
r #只读模式,文件不存在时会报错 w #写入模式,文件存在会清空之前的内容,文件不存在会新建文件 x #写入模式,文件存在会报错,文件不存在会新建文件 a #追加写入模式,不清空之前的文件,直接将写入的内容添加到后面 b #以二进制模式读写文件,wb、rb、ab + #可读写模式,r+、w+、x+、a+,这几种模式还遵循r、w、x、a的基本原则
w
f=open('abc.txt','w') #操作以后会将原文件的内容清空,若不存在文件,则会新建文件,w+情况下会遵循w的基本原则
r
f=open('a.txt','r') #r模式是只读模式,文件不存在则会报错,前提是文件必须存在
x
f=open('abc.txt','x') #文件存在就会报错,文件不存在就会新建文件
a
f=open('abc.txt','a') #不清空原文件内容,直接要写入的内容添加到后面
b
f.write(b'abcd') #在用b的时候必须在输入内容前放一个b,后面必须是以二进制形式
5、文件的读取
f.read()
要读取文件,先要打开一个文件:
f=open('abc.txt','r')
然后读取文件:
f.read()
以字符串的形式读取出来,换行用
形式书写
若再读取一遍
f.read()
输出:
'' #原因是读取过一遍后指针(光标)到了读完以后的点,再往后面读的话就是空的字符串
f.seek(0,0) #光标位置,前面一个参数表示偏移量,后面一个参数表示起始位置,默认起始位置为0,可以表示为f.seek(0),可以重置光标
f.readline()
f.readline() #将第一行的内容以字符串的形式读取出来,包括换行 f.readlines() #一次读取所有,返回一个列表,列表的元素为文件行的内容
6、文件的写入
f.write
f=open('abc.txt','a+')
f.write('liugang') #返回输入内容的长度
f.flush() #将上面的内容冲刷进去
f.readlines() #括号里面必须是以字符串元素组成的序列类型(列表,元组)写进去,换行
需要自己写进去
f.flush()
7、光标位置
f.tell() #返回光标在文件中的位置 f.seek(offset,from) #常用f.seek返回其实起始位置
8、 查看文件信息
f.closed #查看文件是否已经关闭,返回布尔值 f.mode #返回(查看)文件打开模式 f.name #返回(查看)文件名
9、with 形式打开文件,里面的语句执行完后会自动关闭文件
with open('文件名','w') as f:
f.write('abcde')
返回:5
文件能够自己冲刷和关闭
二、异常语法
1、try
a
b=1
运行时会出现a未被定义的语法错误,随后b=1也不再运行,用下面的测试错误后,b=1就可以被调用了
try:
a
except NameError: #名字错误
print('执行这个1错误的补救')
except TypeError: #类型错误
print('执行这个2错误的补救')
except Exception: #这个是错误的总目录
print('可能是其他的错误')
else: #没有错误
print('我没错')
finally:
print('无论如何我都会执行')
f.close #关闭文件
try
fun()
except Exception: #错误总目录被执行后,下面的分目录就不会执行了
print('执行这个错误')
。。。
else:
pass
finally:
pass
try:
a=input('输入数字:')
if a.isdigit():
print(a)
else:
raise TypeError #自己把错误揪出来
except Exception:
print('请遵守游戏规则')
2、assert 断言
assert 1==1 #测试1-==1这个代码是不是错的,没错没有返回值,错了返回错误点及原因
三、作业
1、定义一个函数,读取 reform.txt 的内容。把文件reform.txt中的名人名言,改成“某某说:......”的形式,保存到另一个文件中。
思路:先定义一个函数,一个读取reform.txt,另一个为另存为的文件,先用f.readlines()读取出来,读取出来是一个列表,然后就可以进行切片,替换,换位等操作,再将结果写入新文件,冲刷上去后关闭
def change_file(): #定义函数
f=open('reform.txt','r') #只读该文件
f1=open('1.txt','w+') #读写新文件
li=f.readlines() #读取原文件
for i in li[::2]: #建立循环,以切片后的列表内每个索引
a,b=i.split('。——') #分割字符串
b=b.replace('
','说:') #替换
c=b+a+'
' #字符串拼接
f1.write(c) #写入新文件
f1.flush #冲刷
f1.close #关闭新文件
2、捕捉用户输入时异常,确保程序正常执行
import random
def test():
n = random.randint(1,10)
c = 0
while c<3:
a = input('您还有 %d 次机会,请输入1-10 整数:'%(3-c))
try: #为新加项,测试a不是数字的情况
a = int(a)
if 1<=a<=10:
if a==n:
print('猜对啦')
break
elif a < n:
print('小啦')
else:
print('大啦')
else:
print('输入错误!!!')
except ValueError: #可能会出现的报错
print('请遵守游戏规则') #输出该问题的输出
c+= 1
if c==3:
t=input('您的机会已经用尽,是否还继续 (y:继续 任意键: 结束): ')
if t=='y':
c = 0