zoukankan      html  css  js  c++  java
  • Python 之 文件处理

    文件操作:

    文件路径:d:文件名.txt

    编码方式:utf-8、gbk

    操作方式:只读、只写、追加、读写、写读...

    只读:r    或     rb

    #相对路径

    f=open("文件名",mode="r",encoding="utf-8")    #打开
    content=f.read()                                 #
    print(content)
    f.close()                                       #关闭

    #绝对路径

    f=open("f:gaoya.txt",mode="r",encoding="gbk")     #打开
    content=f.read()                                     #
    print(content)
    f.close()                                           #关闭

    绝对路径注意点:

    1)、以什么编码方式储存的文件,就以什么编码方式打开,以免报错。

    2)、隐藏文件类型的扩展名不需要追加。

    f = open('文件名',mode='rb',)
    content = f.read()
    print(content)
    f.close()

    rb注意:非文字类型或文件的上传下载。

    只写  w     或wb

    #对于w:没有此文件就会创建文件
     f = open('log',mode='w',encoding='utf-8')
     f.write('文件内容')
     f.close()
    
    # 先将源文件的内容全部清除,再写。
     f = open('log',mode='w',encoding='utf-8')
     f.write('文件内容')
     f.close()

    注意:W:没有此文件就会创建,有则删除原文件内容,再添加新内容。

    f = open('log',mode='wb')     #已表明bytes类型,不用写编码类型
    f.write('文件内容'.encode('utf-8'))
    f.close()

    追加:   a   或ab

    f = open('log',mode='a',encoding='utf-8')
    f.write('文件内容')
    f.close()
    f = open('log',mode='ab')
    f.write('文件内容'.encode('utf-8'))
    f.close()

    读写     r+   或  r+b(比较常用)

    f = open('log',mode='r+',encoding='utf-8')
    print(f.read())
    f.close()
    f = open('log',mode='r+b')
    print(f.read())
    f.write('大猛,小孟'.encode('utf-8'))
    f.close()

    r+注意:读写正常,先读后追加

                  写读,从头开始,写多少占多少位

    写读:w+

    f = open('log',mode='w+',encoding='utf-8')
    f.write('aaa')    #先写
    f.seek(0)      #光标移到最前
    print(f.read())    #后读
    f.close()

    注意:全部去除,再添加

    追加  a+

    f = open('log',mode='a+',encoding='utf-8')
    f.write('文件内容')
    f.seek(0)
    print(f.read())
    f.close()

    功能详解

    obj = open('log',mode='r+',encoding='utf-8')
    content = f.read(3)  # 读出来的都是字符   打印前三个字符
    f.seek(3)  # 是按照字节定光标的位置     三个字节一个字,从第二个字开始
    f.tell() #告诉你光标的位置
    print(f.tell())
    content = f.read()
    print(content)
    f.tell()       #知道光标位置
    f.seek(count-9)    #打印后三个字
    f.readable()  # 是否可读
    line = f.readline()  # 一行一行的读
    line = f.readlines()  # 每一行当成列表中的一个元素,添加到list中
    f.truncate(4)
    for line in f:
        print(line)
    f.close()

    注意:必须一行一行读,截取读

              最后加close

    另一种写法:

    with open('log',mode='r+',encoding='utf-8') as f,
        open('log',mode='w+',encoding='utf-8') as f1:      #可打开多个文件
        f.read()
        print(f.read())    #不用写close

    例题1:注册、登录

    username = input('请输入你要注册的用户名:')
    password = input('请输入你要注册的密码:')
    with open('list_of_info',mode='w',encoding='utf-8') as f:
        f.write('{}
    {}'.format(username,password))
    print('恭喜您,注册成功')
    lis = []
    i = 0
    while i < 3:
        usn = input('请输入你的用户名:')
        pwd = input('请输入你的密码:')
        with open('list_of_info',mode='r+',encoding='utf-8') as f1:
            for line in f1:
                lis.append(line)
        if usn == lis[0].strip() and pwd == lis[1].strip():
            print('登录成功')
            break
        else:print('账号和密码错误')
        i+=1

    例题2:将文件中的星儿替换为阿娇

    with open('小护士班主任',encoding='utf-8') as f,open('小护士班主任.bak','w',encoding='utf-8') as f2:
        for line in f:
            if '星儿' in line:  #班主任:星儿
                line = line.replace('星儿','阿娇')
            #写文件
            f2.write(line) #小护士:金老板
    
    import os
    os.remove('小护士班主任') #删除文件
    os.rename('小护士班主任.bak','小护士班主任')  #重命名文件

    注意:替换原文件的内容,写一个与原文件内容相同的新文件,然后删除旧文件,将新文件重命名为原文件的 名字。

    修改文件的步骤:读---写---删---重命名

    概括:

    文件处理
        打开文件
            open('路径''打开方式''指定编码方式')
            打开方式 r w a r+ w+ a+ b
                r+ 打开文件直接写 和读完再写
            编码方式 —— utf-8
        操作文件
            读
                read 一次性读
                readlines 一次性读
                readline 一行一行读
                    不知道在哪儿结束
                    视频 图片 rb bytes 按照字节读
                for循环 —— 最好!!!
            写
                write
            光标 —— 文件指针
                seek _ 指定光标移动到某个位置
                tell _ 获取光标当前的位置
                truncate _ 截取文件
        关闭文件
            close

    编码/解码

    #str --->byte  encode 编码
    s = '二哥'
    b = s.encode('utf-8')
    print(b)
    #byte --->str decode 解码
    s1 = b.decode('utf-8')
    print(s1)
    s = 'abf'
    b = s.encode('utf-8')
    print(b)
    #byte --->str decode 解码
    s1 = b.decode('gbk')
    print(s1)
  • 相关阅读:
    C#对文件/目录的操作:Path、File、Directory、FileStream、StreamReader、StreamWriter等类的浅析
    我的SqlHelper类!
    Visual Studio 如何使用代码片段Code Snippet提高编程速度!!!
    python脚本实现向钉钉群组发送消息
    pause模块
    ansible获取远程机器上的ip地址
    ansible 的file 模块
    find 查找文件
    docker 数据管理
    Docker 镜像 容器 仓库
  • 原文地址:https://www.cnblogs.com/gaoya666/p/8418973.html
Copyright © 2011-2022 走看看