zoukankan      html  css  js  c++  java
  • 文件基本操作

    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")


  • 相关阅读:
    GIT笔记
    C++新式类型转换
    C++ 静态链表基本算法实现
    C++ 顺序栈基本算法实现
    C++ 链栈 基本算法实现
    C++ 循环队列基本算法实现
    C++ 链队列基本算法实现
    C++优先级队列表基本算法实现
    C++单链表基本算法实现
    C++ 循环链表基本算法
  • 原文地址:https://www.cnblogs.com/fdsimin/p/12548763.html
Copyright © 2011-2022 走看看