文件操作

一、文件操作

  1. 总结
    文件路径:存放文件的位置
    编码方式:utf-8,gbk,unicode,etc.
    操作方式:只读,只写,读写,写读(与读写不一样),追加,etc.
    文件修改:文件是不可修改的,但是可通过追加的方式后重命名文件名的方式修改文件里面的内容

  2. 编码方式
    在这里插入图片描述
    在这里插入图片描述

  1. 文件的绝对路径
    打开文件需要知道存放文件的具体位置以及文件名
f = open('D:\Python\study code\ms system https.txt', mode='r', encoding='utf-8')
# 以什么编码方式存储的文件,就要以该编码方式打开,否则会报错(绝对路径下)
content = f.read()
print(content)  # 返回值为:MSFT bug server (即文件里面的内容)
f.close()
  1. 相对路径
    打开文件只需要知道文件名即可操作
f = open('相对路径', mode='r', encoding='utf-8')  # 只读:r
content = f.read()
print(content)  # 返回值为:今天要放假吗? (即文件里面的内容)
f.close()
  1. 操作方式
  1. 只读:r 或 rb
f = open('相对路径', mode='r', encoding='utf-8')  # 只读:r(其中mode可不写)
content = f.read()  # open()函数内置已经将bytes类型转换为str的操作
print(content,type(content))  # 返回值为:今天要放假吗? <class 'str'>
f.close()
f = open('相对路径', mode='rb')  # rb 非文字类文件,上传/下载/存储文件 bytes类型的形式不用列举编码方式
content = f.read()
print(content)  # 返回值为:b'\xe4\xbb\x8a\xe5\xa4\xa9\xe8\xa6\x81\xe6\x94\xbe\xe5\x81\x87\xe5\x90\x97\xef\xbc\x9f'
f.close()
  1. 只写:w 或 wb
    写(w):若没有此文件,则新创建文件,如创建文件"只写",并在文件处写入信息;
    若有文件,则会将写入的信息代入该文件,并删除源文件的信息。
f = open('只写', mode='w', encoding='utf-8')  # 只写:w
f.write('没有文件信息,写入文件信息')  # 需要写入的内容
f.close()
# 返回值为:新建“只写”文件,并再次键入“没有文件信息,写入文件信息”信息
f = open('只写', mode='wb')  # 只写:wb
f.write('如何先将dtr类型转换为bytes'.encode('utf-8'))  # 返回值为:在“只写”文件写入信息
f.close()
# 在这里转为bytes的编码方式必须为文件保存时的编码类型,如下
f = open('只写', mode='wb')  # 只写:w
f.write('如何先将dtr类型转换为bytes'.encode('gbk'))  # 返回值结果会报错或无法打开文件
f.close()
  1. 读写:r 或 r+b
f = open('只写', mode='r+', encoding='utf-8')
print(f.read())  # 先读再写
f.write('\n文件的读写操作')
# 第一次写入的信息还没有读出来,故而只添加了信息在文件里面。
f.close()
f = open('只写', mode='r+', encoding='utf-8')
f.write('\n文件的读写操作')  #  先写再读
print(f.read())
# 在读写的模式下先写再读的模式,写入的信息会从左至右开始按字符个数覆盖之前的信息
f.close()
  1. 写读:w 或 w+b
f = open('只写', mode='w+', encoding='utf-8')
f.write('文件的读写操作')
f.seek(0)  # 调光标的位置
print(f.read())  # 返回值为:在写读的模式下,源文件全部清空后写入信息
f.close()
f = open('只写', mode='w+b')  # 在“只写”文件里面编辑
f.write('文件的读写操作'.encode('utf-8'))
f.seek(0)  # 调光标的位置
print(f.read())  # 返回值为:加入信息的bytes类型信息
f.close()
  1. 追加:a 或 a+
f = open('只写', mode='a', encoding='utf-8')  # 追加:a
f.write(',追加信息')  # 返回值:在源文件信息的基础上追加信息
f.close()
f = open('只写', mode='a+', encoding='utf-8')
f.write('文件的读写操作')
print(f.read())
f.close()
  1. 功能详细叙述
    (a) read的功能
    f.read() # 一次性读完所有内容
    f.readable() # 是否可读
    f.readline() # 一行一行的读
    f.readlines() # 一次性读,每一行当作列表中的一个元素,添加到列表中。
f = open('相对路径', mode='r+', encoding='utf-8')  # 只读:r
content = f.read(3)  # 读取的内容是字符
print(content)  # 返回值为:今天放
f.close()
f = open('相对路径', mode='r+', encoding='utf-8')  # 只读:r
f.seek(3)  # 从光标所在的位置开始读取
# seek()光标是按照字节定位的,一个英文一个字节,一个中文三个字节
content = f.read(3)  # 读取的内容是字符
print(content)  # 返回值为:天放假
f.close()
(b) 文件指针(光标)

f.tell() # 查询光标的位置
f.seek(local-6) # 从光标所在的位置开始读取
f.truncate(6) # 对源文件进行截取,文件中只保留了截取的内容

f = open('相对路径', mode='a+', encoding='utf-8')
f.write('人生若只如初见')
local = f.tell()  # 查询光标的位置
f.seek(local-6)
content = f.read()  # 读取的内容是字符
print(content)  # 返回值为:初见(文件完整内容为“认识若只如初见”)
f.close()
  1. for 循环读取
f = open('相对路径', mode='r+', encoding='utf-8')
line = f.readline()
print(line)
for line in f:  # 循环将“相对路径”文件里面的信息全部隔行打印
    print(line)
f.close()
  1. with…as…:
    打开,且不需要用到f.close()函数
f = open('相对路径', mode='r+', encoding='utf-8')
with open('相对路径', mode='r+', encoding='utf-8')as f:
    print(f.read())
  1. 同时可以打开多个文件
f = open('相对路径', mode='r+', encoding='utf-8')
f1 = open('只写', mode='r+', encoding='utf-8')
with open('相对路径', mode='r+', encoding='utf-8')as f,\
open('只写', mode='r+', encoding='utf-8')as f1:
    print(f.read())
    print(f1.read())
  1. 文件修改
    需要做删除文件、重命名文件这两步的操作。
    格式如下:
import os
os.remove('文件名')
os.rename('新建好空文件的文件名','新文件名')  
with open('list_of_name', encoding='utf-8') as f,open('list_of_name.back', mode='w', encoding='utf-8') as 

例子

f1:
    for line in f:
        if '123456' in line:
            line = line.replace('123456','123qwe')
        print()
        f1.write(line)
import os
os.remove('list_of_name')  # 删除文件名
os.rename('list_of_name.back','list_of_name')  # 修改文件名
  1. 练习:注册 -> 界面 -> 登录
username = input('please enter the name which you like:')
password = input('please enter the password which you like:')
with open('list_of_name', mode='r+', encoding='utf-8') as f:
    f.write('{}\n{}'.format(username,password))
print('successful to register!')
lis = []
i = 0
while i < 3:
    user = input('please enter your name:')
    pass_wd = input('please enter your password:')
    with open('list_of_name', mode='r+', encoding='utf-8') as f:
        for line in f:
            print(line)
            lis.append(line)
    if user == lis[0].strip() and pass_wd == lis[1].strip():
        print('OK')
        break
    else:
        print('username and password is error')
    print(lis)  # 返回值为:['Rose\n', '123456']
    i += 1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值