• Python文件操作


    一:文件操作必需

    • 文件的路径

    可以是相对路径,也可以是绝对路径

    • 文件的编码 

     文件的存储和打开编码必需一样

    • 操作动作

    动作用 r  w  a   

    二:文件操作

    2.1 读操作

    • read 是将文件的内容全部读取
    • readline  每次只读取文件一行内容
    • 读取的时候要注意要分批区读,如按每行去读
    • 每行读取的内容包括换行符,如果在打印时 print也会加上换行符,所以可以将每次读取的内容strip然后再打印
    • 文件时可迭代对象,可以被for循环

    2.1.1 r操作

    # read会一次性的读取文件内容

    f = open('wangys',mode='r',encoding='utf-8')
    ret = f.read()
    print(ret)

     # readline每次读取一行内容,读取的包括换行符

    # 内容包括换行符
    # 如果不做处理,会将换行符打印出来
    f = open('wangys',mode='r',encoding='utf-8') ret = f.readline() print(ret) ret = f.readline() print(ret) # name age
    # 对换行符做strip处理
    f = open('wangys',mode='r',encoding='utf-8') ret = f.readline().strip() print(ret) ret = f.readline().strip() print(ret)
    #
    name
    age
    # 推荐读的方式,一行一行的读取
    f = open('wangys',mode='r',encoding='utf-8')
    for line in f:
        print(line.strip())

    打开方式:rb  常用于非文字文件,上传下载 

    2.2 写操作

    • 如果文件存在,则清空文件,如果不存在,则创建
    • 默认不会加换行符,如果需要换行,则需要加换行符

    2.2.1 w

    f = open('lala',mode='w',encoding='utf-8')
    f.write('haha')
    f.close()

    打开方式:wb 注意encode

    f = open('lala',mode='wb')
    f.write('撒旦飞洒地方'.encode('utf-8'))
    f.close()

    2.3  追加

    • 需要文件事先存在
    • 追加内容到文件

    打开方式:a

    f = open('lala',mode='wb')
    f.write('撒旦飞洒地方'.encode('utf-8'))
    f.close()
    
    f = open('lala',mode='a',encoding='utf-8')
    f.write('谁说的')
    f.close()

    打开方式: ab

    f = open('lala',mode='ab')
    f.write('我说的'.encode('utf-8'))
    f.close()

    2.4 读写

    用的最多

    打开方式: r+   如果是先读后写,是追加效果(读完后光标移到了最后,写追加到了最后),如果是写读,会有覆盖效果(光标在首位置,然后写)

    f = open('lala',mode='r+',encoding='utf-8')
    print(f.read())
    f.write('真的')
    f = open('lala',mode='r+',encoding='utf-8')
    f.write('假的')
    print(f.read())
    f.close()

    打开方式 r+b

    f = open('lala',mode='r+b')
    print(f.read())
    f.write('你好啊'.encode('utf-8'))
    f.close()

    三:其他操作 

    3.1  按字符读取

    • read是按照字符来读取的
    wangys
    f = open('wangys_info',mode='r+',encoding='utf-8')
    data = f.read(3)
    print(data)
    f.close()

    3.2 seek

    • seek第一个参数是偏移量,第二个参数是位置
    • seek(0)移动到开始位置
    • seek(0,2) 移动到文件结束位置
    • seek是按字节来移动的位置的
    
    f = open('wangys_info',mode='r+',encoding='utf-8')
    f.seek(3)
    print(f.read())
    f.close()

    3.3 tell

    • 告诉我们光标的位置
    • 单位为bytes
    王诚的博客
    
    f = open('wangys_info',mode='r+',encoding='utf-8')
    print(f.read())
    print(f.tell())
    f.close()

    通过seek跟read读取指定的内容

    读取博客
    f = open('wangys_info',mode='a+',encoding='utf-8') f.write('博客') f.seek(f.tell()-6) print(f.read())

    3.4  readline readlines

    readline 一行一行读

    王诚
    博客
    
    f = open('wangys_info',mode='r+',encoding='utf-8')
    line = f.readline()
    print(line)
    f.close()

    readlines

    将读取的的每一行内容当作列表的元素放入一个列表中

    f = open('wangys_info',mode='r+',encoding='utf-8')
    lines = f.readlines()
    print(lines)
    f.close()

    3.5 通过文件句柄将文件所有内容读取出来

    f = open('wangys_info',mode='r+',encoding='utf-8')
    for line in f:
        print(line)
    f.close()

    3.6  使用with打开文件

    with open('wangc',mode='r+',encoding='utf-8') as f1,
            open('wangys',mode='r+',encoding='utf-8') as f2:
        print(f1.read())
        print(f2.read())

    3.7

    用户注册登录

    register_user_name = input("请输入你要注册用户名").strip()
    register_password = input("请输入密码").strip()
    with open('user_list',mode='w',encoding='utf-8') as register_f:
        register_f.write('{}
    {}'.format(register_user_name,register_password))
    print('您注册成功')
    
    
    count = 0
    user_list=[]
    while count < 3:
        login_user = input("请输入你要登录的用户名称").strip()
        login_pwd = input("请输入你登录的密码").strip()
        with open('user_list',mode='r+',encoding='utf-8') as judge_login_user:
            for line in judge_login_user:
                user_list.append(line)
            if login_user == user_list[0].strip() and login_pwd == user_list[1].strip():
                print('登录成功')
                break
            else:print('用户名密码错误')
        count+=1

    3.8  文件内容修改

    wangys_info文件  将文件里的wangys替换为王诚

    姓名:wangys
    性别:男
    
    import os
    
    with open('wangys_info',encoding='utf-8') as f1,
            open('wangys_info.bak','w',encoding='utf-8') as f2:
        for line in f1:
            if "wangys" in line:
                line=line.replace('wangys','王诚')
            f2.write(line)
    
    os.remove('wangys_info')
    os.rename('wangys_info.bak','wangys_info')

     3.9 简单的日志处理

    id,name,age,sex
    1,wangys,18,male
    2,mengsx,18,female
    3,caomei,0.5,male
    log=[]
    with open('info',mode='r',encoding='utf-8') as f:
        first_line_list = f.readline().strip().split()
        for line in f:
            dic = {}
            for index in range(len(first_line_list)):
                dic[first_line_list[index]] = line.strip().split()[index]
                log.append(dic)
    print(log)

     

  • 相关阅读:
    leetcode——202.快乐数
    leetcode——136. 只出现一次的数字
    leetcode——74.搜索二维矩阵
    leetcode——240.搜索二维矩阵
    leetcode——414.第三大的数
    020 迭代器模式
    019 模板模式
    018 中介者模式
    017 命令模式
    016 责任链模式
  • 原文地址:https://www.cnblogs.com/wc89/p/10261545.html
Copyright © 2020-2023  润新知