文件操作

文件操作  &  编码

一:文件操作

python.txt文件

1, 文件路径:d:\python.txt   (绝对路径)

 绝对路径:从根目录开始
    对路径:从当前位置开始
2.  编码方式:UTF-8  GBK等
3.  操作方式:只读,只写,追加,读写,写读
  如:简单文件读取

绝对路径:
f = open('d:\python.txt',mode = 'r',encoding = 'UTF_8')
content = f.read()
print(content)
f.close()
相对路径:(在同一个文件夹里)
f = open('python.txt',mode = 'r',encoding = 'UTF_8')
content = f.read()
print(content)
f.close()

注意:以什么方式储存的文件就要以什么方式打开
操作:
只读;mode = 'r'     或者  mode = ‘ rb’ 

           (r是以str的方式读出来;rb十一bytes方式读出来)(没有encoding)

             rb的作用:打开图片,视频,写入,存入,上传下载都用rb
只写mode = 'w'     或者  mode = ‘ wb’ 

w :对于只写,没有此文件,就会创建,若有此文件先删除源文件的内容再写
   f = open('文件名',mode = 'w',encoding = 'UTF_8')
   f.write('内容')
   f.close()
wb :以bytes写入,但显示出来得转化为UTf-8 f = open('文件名',mode = 'wb') f.write('内容'.encode(UTF-8)) f.close()

追加mode = 'a'   或者mode = ' ab'

 原理:光标自动再原内容的末尾
  a:f = open('文件名',mode = 'a',encoding = 'UTF_8')
     f.write('需要追加的内容')
     f.close()
  ab:f = open('文件名',mode = 'ab')
     f.write('内容'.encode(UTF-8))
     f.close()

读写mode = 'r+'  或者mode = ' r+b'

  如果在mode=‘r+’的模式下先写后读,则写入多少位从头开始占原来内容多少位。
  读出来的是原来的没有被占的内容。
  f = open('文件名',mode='rb',encoding='UTF-8')
  print(f.read())
  f.write('加油')
  f.close()

写读mode = 'w+'   先把原文件内容删除,再写入,与‘w’的区别是‘w+’加上print(f.read())不会报错
功能详解

f.read()          #read读出来的都是字符,可选择读几个字符,如f.read(3)读前三个字符
f.seek()          #按照字节定光标的位置;一个中文为三个字节;如f.seek(3)光标再第一个中文字符之后
f.tell()          #告诉你光标的位置
f.readable()      #是否可读,返回true或者false
f.readline()      #一行一行的读;
f.readlines()     #每一行当成列表中的元素,增加到列表中
f.truncate()      #截取原文件的内容

补充:

①for line in f:
    print(line)把f中的内容都读出来
②f = open('文件名',mode = 'r+',encoding='utf-8')
  f.close()的另一种写法
with open('文件名',mode = 'r+',encoding='utf-8') as f:
    print(f.read())

用with的好处:自动关闭,不用写close();也可以同时打开多个文件
如:
with open('文件名',mode = 'r+',encoding='utf-8') as f,\
    with open('文件名',mode = 'w',encoding='utf-8') as f1:
        相关操作

为啥要有文件处理:数据从内存到硬盘的过程
登陆注册:
要求:①注册②注册的用户名和密码写入到文件③登录时从文件取出用户名和密码来匹配输入的用户名和密码
          ④若匹配失败,有三次机会

username = input('请输入注册的用户名:')
password = input('请输入注册的密码:')
with open('登陆注册信息文件',mode = 'w',encoding = 'UTF-8') as f:
    f.write('{}\n{}'.format(username,password))
    print('恭喜你,注册成功!')
lis = []
i = 0
while i < 3:
    i += 1
    uname = input('请输入用户名:')
    pword = input('请输入密码:')
    with open('登陆注册信息文件', mode='r', encoding='UTF-8') as f1:
        for line in f1:
            lis.append(line)
    if  uname == lis[0].strip() and pword == lis[1]:
        print('登陆成功')
    else:
        print('账号或者密码错误')

 

修改文件:

文件不能修改,若非得修改,用replace,删除文件,重命名文件(实际是新文件替换旧文件)

with open('旧文件',encoding = 'utf-8') as f,\
    with open('旧文件.bak',mode = 'w',encoding = 'utf-8') as f1:
          for line in f:
              if '要修改的内容' in line:
                  line = line.replace('要修改的内容','新内容')
          f1.write(line)  #写文件
import os
os.remove('旧文件')   #删除文件
os.rename('旧文件.bak','旧文件') #重命名

  

 

posted @ 2019-03-06 21:43  红领巾***  阅读(130)  评论(0编辑  收藏  举报