文件基本操作

1,打开文件:

f = open(r"学习.py",mode="rt",encoding="utf-8") # 第一种打开方式,读模式
res = f.read()
print(res)
f.close()
with open(r"学习.py",mode="rt",encoding="utf-8") as f1: # 第二种打开方式,读模式
    res = f1.read()
    print(res)
with open(r"学习.py",mode="wt",encoding="utf-8") as f1: # 写模式
    f1.write("你说写啥")

2, 文件的模式:

以t 模式为基础进行的操作:

2.1  r模式:只能读不能写,若文件过大,读入内存时可能会将内存占满

with open (r"zzz",mode="rt",encoding="utf-8") as f:
    print("不存在的文件") # No such file or directory: 'zzz' 程序直接报错

2.1.1  r模式与登录案例:

inp_username = input("请输入你的账号:")
inp_psd = input("请输入你的密码:")
with open(r"学习.py",mode="rt",encoding="utf-8") as f:
   for line in f:
       res = line.strip().split(":")
       username,psd = res[0],res[1]
       if inp_username == username and inp_psd == psd:
           print("登录成功")
           break
   else:
       print("账号或密码有误")

2.2  w模式,只写模式,当文件不存在是会创建一个文件,当文件存在时,会清空文件里的内容

with open (r"zzz.txt",mode="wt",encoding="utf-8") as f:
    ... # 这一步创建了这个文件
with open(r"zzz.txt", mode="wt", encoding="utf-8") as f1:
    f1.write("这是我现在写的") # 这一步刚写入了内容
with open(r"zzz.txt", mode="wt", encoding="utf-8") as f2:
    ... # 这一步删掉了刚才写的内容

# w模式下的文件拷贝功能:
wenjian1 = input("输入源文件的绝对路径:")
wenjian2 = input("输入拷贝文件的绝对路径:")
with open(r"{}".format(wenjian1),mode="rt",encoding="utf-8")as f:
    res = f.read()
with open(r"{}".format(wenjian2),mode="wt",encoding="utf-8") as f1:
    f1.write(res)

2.3  a模式,只追加模式,当文件不存在是会创建一个文件,当文件存在时,会直接在内容后面追加

with open (r"yyy.txt",mode="at",encoding="utf-8") as f:
    ... # 这一步创建了这个文件
with open(r"yyy.txt", mode="at", encoding="utf-8") as f1:
    f1.write("这是我第一次写的") # 写入内容
with open(r"yyy.txt", mode="at", encoding="utf-8") as f2:
    f2.write("这是我第二次写的") # 在第一次内容的后面继续写入,无换行。若需要换行则要自己写入
.

用户注册的小案例:

name = input("输入账号")
pwd = input("输入密码")
with open (r"yyy.txt",mode="at",encoding="utf-8") as f:
    f.write("{}:{}
".format(name,pwd))

3,  配合+使用:

3.1  r+:

with open(r"yyy.txt",mode="rt+",encoding="utf-8") as f:
    res = f.read()
    print(res)   # 可以读出文件内容
    f.write("继续写") # 也可以继续追加新的内容

3.2  w+:

with open(r"yyy.txt",mode="wt+",encoding="utf-8") as f:
    f.write("你想写什么")
    print(f.read()) # 因指针在内容最后,所以没有读出内容

3.3  a+:

with open(r"yyy.txt",mode="at+",encoding="utf-8") as f:
    f.write("你想写什么")
    print(f.read())  # a模式永远在最末尾追加内容

 3.4 了解: x模式下的文件操作,x模式只能写,不能读,并且若文件存在,则程序报错,若程序不存在,则程序新建这个文件。(此模式使用较少)

with open (r"yyy.txt",mode="x",encoding="utf-8") as f:
    f.write("是不是报错") # 程序报错
with open(r"xxx.txt", mode="x", encoding="utf-8") as f1:
    f1.write("这个文件不存在,将会被新建")

3.5  b 模式的文件操作,b模式是通用的。

wenjian = input("请输入文件绝对路径")
wenjian2 = input("请输入拷贝文件存放的绝对路径")
with open(r"wenjian",mode="rb") as f,
open(r"wenjian2",mode="wb") as f1:
while True:
    res = f.read(1024) # 控制每次读入的量
    if len(res) == 0:
        break

 4,  文件的相关函数:

4.1  f.read()  在t模式下的read(n)是以字符为单位的,表示从当前光标位置下读取几个字符

with open(r"yyy.txt",mode="rt",encoding="utf-8") as f:
    res = f.read(5)
    print(res) #你想写什么  读出来5个字符

4.2   f.seek():用来移动光标的位置,以字节为单位 ,f.seek(n,模式) n指的是移动的字节个数,所以当内容有中文时,要注意指针移动的字节数,中文一般以三个字节为单位

模式0代表以文件开头为参照,指针移动字节的个数

模式1代表以指针当前的位置为参照,指针移动字节的个数 

模式2代表以指针末尾的位置为参照,指针移动字节的个数,这个个数一般为负数。 

fp = open("ceshi5.txt",mode="r+",encoding="utf-8")
res = fp.read(6)
fp.seek(2)  # 以文件开头位置为参照,移动两个字节
res = fp.read(2)
total = fp.tell()
print(total)
print(res)

 4.3  f.tell(),返回光标左侧的所有字节数

 5,文件修改的两种方式:

with open(r"xxx.txt",mode="rt",encoding="utf-8") as f:  # 方法一:适合用于文本编辑
    res = f.read()
    date = res.replace("新建","创立")
with open(r"yyy.txt",mode="wt",encoding="utf-8") as f1:
    f1.write(date)

import os                                              # 方式二:不容易占内存
with open(r"xxx.txt",mode="rt",encoding="utf-8") as f,
     open(r"yyy.txt",mode="wt",encoding="utf-8") as f1:
    for line in f:
        date = line.replace("创立","新建")
        f1.write(date)
os.remove("xxx.txt")
os.rename("yyy.txt","xxx.txt")


原文地址:https://www.cnblogs.com/fdsimin/p/12548763.html