zoukankan      html  css  js  c++  java
  • day3_文件读写

    在python3里面只有这一种打开文件的方法,open('a.txt'),文件叫什么名字都行
    文件打开的时候有三种方式(读、写、追加),默认是读的方式打开文件
    读,用r表示,以读文件的方式打开的时候,如果文件不存在会报错;如果文件存在,而且不需要往文件里写东西的时候,用r打开,只要沾上r,文件不存在的时候就会报错

     

    如f = open('a.txt'),如果a.txt不在当前目录下会报错,如果想不报错就创建一个a.txt,如果a.txt文件里有内容就会把内容读出来
    f = open('a.txt', encoding='utf8')
    print(f.read())  # 读取文件所有内容,读到内存中,返回的是一个字符串
    print(f.readlines())  # 读取文件所有内容,返回的是一个list,list每个元素是文件的每一行
    print(f.readline())  # 每次只取一行内容,要取多行内容,要多次执行print(f.readline())

    写,用w表示,以写文件的方式打开的时候,如果文件不存在,会新建一个文件;如果文件存在会把之前的文件内容清空,然后会读不到内容报错,只要沾上w,就会清空以前的文件内容
    f = open('a.txt', 'w', encoding='utf8')
    print(f.read())
    f = open('a.txt', 'w', encoding='utf8')
    f.write('哈哈哈哈')  # write是写内容,只能写字符串
    f.writelines(['123 ', '345'])  # writelines()方法写入的是可迭代对象,如list,str,tuple,dict,写入字典的话只能把key写进去,要想全部写进去,要转换成字符串
    f = open('a.txt', 'r+', encoding='utf8')  # r+是读写模式
    f.write('哈哈哈哈')  # 会把之前文件里第一行的相同长度的内容覆盖掉,如果文件里内容少于写入的字符串,全部覆盖
    f = open('a.txt', 'w+', encoding='utf8')  # w+是写读模式
    f.write('哈哈哈哈')  # 会把之前文件里所有的内容覆盖掉
    f.seek(0)  # 移动文件指针
    print(f.read())
    r+,能读能写,如果文件不存在会报错
    w+,能读能写,会把之前的内容清空

     

    追加,用a表示,a的好处是没有文件会创建文件,也不会清空以前的文件内容,也不报错
    f = open('b.txt', 'a', encoding='utf8')
    f.write('哈哈哈哈')
    f.seek(0) # 移动文件指针
    print(f.read())
    追加(a)模式只能写,不能读,运行的时候会报错
    # a+是追加读写模式
    f = open('b.txt', 'a+', encoding='utf8')
    f.write('哈哈哈哈')
    f.seek(0)  # 移动文件指针
    print(f.read())
    追加读写(a+)模式既能写,又能读,不会清空以前的内容
    f = open('b.txt', 'a+', encoding='utf8')
    print(f.read())
    执行上面两行会为空显示,因为a+模式是从文件的末尾追加,读的时候会显示空内容,要想读到内容必须加上f.seek(0)才能读出来

    如何将一个文件对象(f)中的数据存放到列表中?
    f = open('rank.py', encoding='utf8')
    res = list(f)
    print(res)  # 打印出一个列表,每个元素是文件的每一行

    文件对象的内置方法f.read([size=-1])作用是读取文件对象内容,size参数是可选的,那如果设置了size=10,例如f.read(10),将返回什么内容呢?
    将返回从文件指针开始(注意这里并不是文件头哦)的连续10个字符,f.read(-1)返回从文件指针开始的全部内容

    编写代码,将文件a.mp4保存为新文件a.txt
    f1 = open('a.mp4', encoding='utf8')
    f2 = open('a.txt', 'w', encoding='utf8')
    f2.write(f1.read())
    f2.close()
    f1.close()

    with open('b.txt', 'a+', encoding='utf8') as f:  # 运行完成后,with可以自动关闭文件
    f.seek(0)
    for line in f:
    print(line)

     

    with open('a.txt','a+',encoding='utf8') as f,open('b.txt','a+',encoding='utf8') as f2:  # 打开多个文件的方法

    user_info = {
    'jmy': {'money': 100,
    'height': 180,
    'password': '123456'},
    'agr': {'money': 30,
    'height': 190,
    'password': '123456'}
    }

    f = open('users.txt', 'a+', encoding='utf8')
    f.write(user_info)  # 第一种情况,运行会报错,因为write写入的是字符串,而现在是字典要写到users.txt里
    print(str(user_info))  # 第二种情况,强制类型转换成字符串,虽然能读出来但是没写进去
    f.seek(0)  # 第三种情况,把文件指针移到最开始
    print(f.read())  # 第三种情况,没有写进去,什么也读不到
    f.write(str(user_info))  # 第四种情况,写到文件里了,但是写进去的是一个字符串
    f.seek(0)  # 第五种情况,把文件指针移到最开始
    print(f.read())  # 第五种情况,读出来了
    f.seek(0)  # 第六种情况,把文件指针移到最开始
    print(type(f.read()))  # 第六种情况,查看类型,发现是字符串类型,字符串类型不好取值
    f.seek(0)  # 第七种情况,把文件指针移到最开始
    print(dict(f.read()))  # 第七种情况,转换类型,报错,不能转换
    f.seek(0)  # 第八种情况,把文件指针移到最开始
    print(eval(f.read()))  # 第八种情况,转换类型,字符串转换成字典类型
    f.seek(0)  # 第九种情况,把文件指针移到最开始
    new_user_info = eval(f.read())  # 第九种情况,转换类型,验证是否已转换成字典类型
    print(type(new_user_info))  # 第九种情况,转换成功,打印出< class‘dict’>
    f.seek(0)  # 第十种情况,把文件指针移到最开始
    new_user_info = eval(f.read())  # 第十种情况,在users2.txt里输入一个list
    print(type(new_user_info))  # 第十种情况,转换成功,打印出< class‘list’>
    同理在users2.txt里输入一个tuple/string,会打印出< class‘tuple/'str' >
    怎么把字典存到文件里面,通过字符串的形式把字典存进文件(将字典转换成字符串),然后再把字符串转换成字典读出来(再将字符串转换成字典)

    修改文件的方式:f.seek(0),f.truncate()  # 清空文件所有内容
    f.flush()  # 刷新缓冲区,把缓冲区的内容写到磁盘里
    获取文件对象(f)当前文件指针的位置  # f.tell()

  • 相关阅读:
    寒江独钓(0):内核开发上机指导
    异常:Hibernate数据库恢复错误
    天书夜读:从汇编语言到Windows内核编程笔记(4)
    企业WEBGIS网站解决方案
    如何使用国际开源项目构建一个完整的GIS(地理信息)应用系统
    将指定文件夹下的所有文件copy到目标文件夹下
    一些jquery的小知识
    压缩指定目录下指定文件(包括子目录下的文件)
    解压一个rar文件
    关于下载txt文本文挡的问题
  • 原文地址:https://www.cnblogs.com/laosun0204/p/8478190.html
Copyright © 2011-2022 走看看