python之路day08--文件的操作

文件的操作

hanfei的博客.txt

1/文件的路径
2、编码方式
3、操作方式:只读,只写,追加,读写,写读...
只读
f=open('hanfei的博客',mode='r',encoding='utf-8')
print(f.read()) #战术上勤奋掩盖不了战略上的懒惰
f.close()

f=open('hanfei的博客',mode='rb')   #rb代表只读bytes类型,不需要写编码方式
print(f.read(),type(f)) #b'\xe6\x88\x98\xe6\x9c\xaf\xe4\xb8\x8a\xe5\x8b\xa4\xe5\xa5\x8b\xe6\x8e\xa9\xe7\x9b\x96\xe4
\xb8\x8d\xe4\xba\x86\xe6\x88\x98\xe7\x95\xa5\xe4\xb8\x8a\xe7\x9a\x84\xe6\x87\x92\xe6\x83\xb0'
f.close()
读写 r+
先读在写
f =open('hanfei的博客',mode='r+',encoding='utf-8')
print(f.read()) #先把内容读出来,现在光标在最后
f.write('hahhaha') #然后在写
f.close()


f =open('hanfei的博客',mode='r+b') #以bytes类型写读,一般用不到
print(f.read()) #先把内容读出来,现在光标在最后
f.write('bbb'.encode('utf-8')) #然后在写

先写再读
f =open('hanfei的博客',mode='r+',encoding='utf-8') #文件内容:萨达撒大大萨达萨达是
f.write('我是') #从头开始写,有多少位占多少位,光标在这里,最后在读出来
print(f.read()) #撒大大萨达萨达是
f.close() #
只写
f=open('hanfei的博客',mode='w',encoding='utf-8')
f.write('放假了')  #如果没有这个文件,则创建写入。有这个文件写的时候会把文件内容清楚,在写


f=open('hanfei',mode='wb')  #写成bytes类型
f.write('博客园'.encode('utf-8'))   #srt-->>bytes存储 编码utf-8
写读 w+
f=open('hanfei的博客',mode='w+',encoding='utf-8')
f.write('放假了')
print(f.read()) #空的  因为写完后光标在最后,所以读不到什么东西了


f=open('hanfei的博客',mode='w+',encoding='utf-8')
f.write('放假了')
f.seek(0) #设置光标
print(f.read()) #放假了
追加a
f = open('hanfei',mode='a',encoding='utf-8')
f.write('good!')  #默认光标在最后一位,在追加

f = open('hanfei',mode='ab')
f.write('day day up!'.encode('utf-8'))
a+(也是读写)
f = open('hanfei',mode='a+',encoding='utf-8')
f.write('good!~~~')  #默认光标在最后一位,在追加
f.seek(0)
print(f.read()) #博客园good!good!good!day day up!good!good!good!~~~good!~~~

功能详解:seek、tell、readline、readlines

seek简介:用于移动文件读取指针到文件指定的位置
file. seek(offset[, whence])
whence:0,1,2三个参数,0表示文件开头,1表示当前位置,2表示文件结尾
offset:偏移量,可正可负,正数表示向后移动offset位,负数表示向前移动offset位。

f = open('hanfei',mode='r+',encoding='utf-8')  #博客园good!good!good!day day up!good!good!good!~~~good!~~~我是
# print(f.read(3))#博客园   #读出来的都是字符
f.seek(3) #seek设置光标 是按照字节取的,utf-8里,3个字节表示一个中文,1个字节表示一个英文字符
count=f.tell()  #tell 告诉你光标的位置
print(count) #3 光标的位置

print(f.read())
f.close()

 

f.readable() #判断是否可读 返回T or F
line=f.readline() #一行一行s的读
line=f.readlines() #每一行当成一个元素,添加到列表中例如['asd\n', '123\n', '4444']

print(line)
for line in f:  #对文件中内容循环打印出来,不要全部读出来,要限制字符数量f.read(1000)
print(line) #abc12

f.close()

截取

f.truncate(5) #截取到第5位

 

当open文件的时候,最后都要加上close.还有另外一种方法不用close关闭文件 with open

with open('hanfei',mode='r+',encoding='utf-8') as f1,\
        open('hanfei',mode='w+',encoding='utf-8') as f2:

    for line in f1:
        print(line)

with open('test',mode='w+',encoding='utf-8') as f1,\
        open('test',mode='r+',encoding='utf-8') as f2:
    f1.write('asd\n123\n4444')
    f1.seek(0)
    print(f1.read())

    # print(f2.readlines()) #['asd\n', '123\n', '4444']
    f2.seek(2,0) #从头开始读,光标在第二位 #d
    print(f2.read())

 

练习题:登录注册、用户名密码储存到文件中

#需求:注册的时候把用户名密码储存到文件中
username = input('请输入您要注册的用户名:')
password = input('请输入要设置的密码:')
with open('user_of_info', mode='w', encoding='utf-8') as f:
    f.write('{usmn}\n{passwd}'.format(usmn=username, passwd=password))
    f.seek(0)
    print(f.read(), type(f.read()))  # hanfei 1234


i=0
lis=[]
while i <3:
        user = input('请输入您的用户名:')
        pwd  = input('请输入密码:')
        with open('user_of_info',mode='r+',encoding='utf-8') as f1:
            for line in f1:
                lis.append(line)
                #print(lis)
        if user.strip() ==lis[0].strip() and pwd.strip()==lis[1].strip() :
            print('登陆成功!')
            break

        else:
            print('用户名或密码错误,请重试')

        i+=1

 

#文件处理

#打开文件
#open('路径','打开方式','指定编码方式')
#打开方式 r w a r+ w+ a+ b #不写的话(默认是read)
#r+ 打开文件直接写 和 读完在写 (光标位置不同)
# 建议读的时候就读,写的时候就写,只能单独的方式去操作文件


#操作文件
#读
#read 一次性读
#readline #一行一行读
#不知道在哪儿结束
#视频、图片用rb 读,按照字节读取
#for循环--最好

#写
#write
#\n 换行
#光标——文件指针
#seek 指定光标移动到某个文职
#tell
#truncate

#关闭文件
# close
 修改文件: 文件是不能修改的

# (只能先把文件读出来,在写到另一个文件中,把旧文件删除,新文件重命名为原文件名)
f = open('小护士班主任',mode='w',encoding='utf-8')
f.write('班主任:星儿\n小护士:金老板')


with open('小护士班主任',mode='r',encoding='utf-8')as f,\
        open('小护士班主任.bak',mode='w',encoding='utf-8') as f2:
    for line in f:
        if '星儿' in line:
            line = line.replace('星儿','阿娇')

        f2.write(line)

#删除文件和重命名文件 导入os模块
import os
os.remove('小护士班主任') #删除文件
os.rename('小护士班主任.bak','小护士班主任') #重命名

 





posted @ 2019-01-24 16:50  hanfe1  阅读(318)  评论(0编辑  收藏  举报