今日内容

  • 文件操作

内容详细

1.打开文件

1.open("作业讲解.py",mode="r",encoding="utf-8")

2.文件打开模式

  • r/w/a(只读只写字符串)

  • r+/w+/a+(可读可写)

  • rb/wb/ab(只读只写二进制)

    • 字符串转换成"二进制"

      v="你好"

      data=v.encode("utf-8")

    • 二进制转换成字符串

      v=""

      data=data.decode("utf-8")

  • r+b/w+b/a+b(可读可写二进制)

1.mode=r:

以只读方式打开文件 / 不能写 / 如果文件不存在 则报错

  1. #打开文件
  2. file_object=open("作业讲解.py",mode="r",encoding="utf-8")
  3. #读文件
  4. content=file_object.read()
  5. print(content)
  6. #关闭文件
  7. file_object.close()
  8. # mode=r只能读 不能写
  9. file_object.write("dhhd")#文件中写入内容
  10. file_object.close()#关闭文件 将内存中内容保存到存储地
  11. #io.UnsupportedOperation: not writable
2.w:

以只能写方式 打开文件 /不能读 / 写之前内容先被清空 / 文件不存在时候会新建文件

  1. #在写之前先清空文件,一般用于新建文件
  2. #打开文件
  3. file_object=open("file_test.txt",mode="w",encoding="utf-8")
  4. #写内容
  5. file_object.write("测试")
  6. file_object.close()
  7. #"测试"
  8. #mode=w 不能读
  9. file_object=open("file_test.txt",mode="w",encoding="utf-8")
  10. file_object.write("测试")
  11. content=file_object.read()
  12. print(content)
  13. file_object.close()
  14. #io.UnsupportedOperation: not writable
3.a:

以只能追加方式打开文件 / 文件不存在则新建文件 / 光标永远在内容最后位置

  1. #写入:a,只追加不能读 + 不存在则新建
  2. file_object=open("file_test.txt",mode="a",encoding="utf-8")
  3. file_object.write("你好")
  4. file_object.close()
  5. #测试你好
4.r+:

以可读可写方式打开文件

  • 读:默认光标从0开始读,也可以通过seek调整光标位置,读物完后会改变光标 位置,所以在写之前需要确定光标位置

  • 写:从光标所在的位置开始写,也可以通过seek调整光标位置, 容易覆盖已存在的内容

  • Seek(2): 在写之前改变光标位置 从第二个字节开始

    1. #文件已经存在的文件内容::"今天要好好学习哦"
    2. file_object=open("file_test.txt",mode="r+",encoding="utf-8")
    3. content=file_object.read()#读取后光标移动到文件最后一个位置
    4. file_object.seek(3)#改变光标位置 从第三个字节后开始写入
    5. file_object.write("你好")#第三个字节后的两个字符,(天要)将会被覆盖
    6. #今你好好好学习哦
    7. file_object.close()
6.w+:
  • 写入时候文件内容先被清空,所以读取时需要调整光标

    1. file_object=open("file_test.txt",mode="w+",encoding="utf-8")
    2. #在写入之前文件内容就被清空
    3. content=file_object.read()
    4. print(content)#打印空
    5. file_object.write("aaaa")
    6. file_object.seek(0)#在读取之前需要调整光标位置 不然读取不到值
    7. content1=file_object.read()
    8. print(content1)
    9. file_object.close()
6.a+ :

在之前文件内容上进行追加,打开文件光标就在内容的最后位置

​ 所以读取的时候需要调整光标

  1. file_object=open("file_test.txt",mode="a+",encoding="utf-8")
  2. #在之前文件内容上进行追加,打开文件光标就在内容的最后位置
  3. # 所以读取的时候需要调整光标
  4. file_object.seek(0)
  5. content=file_object.read()#
  6. print(content)#打印空
  7. # file_object.write("aaaa")
  8. # file_object.seek(0)#在读取之前需要调整光标位置
  9. # content1=file_object.read()
  10. # print(content1)
  11. file_object.close()
7.rb/wb/ab
  • 字符串转换成"二进制"encode

    v="你好"

    data=v.encode("utf-8")

  • 二进制转换成字符串decode

    v="\xe6"

    data=data.decode("utf-8")

    1. #示例1 w
    2. f=open("a.txt",mode="w",encoding="utf-8")
    3. f.write("你好")#传入字符串
    4. #将“你好” 根据encoding指定的编码转换成二进制:
    5. #"你好" -->10001010 10001010 10001010 10001010 10001010 10001010
    6. #将二进制写入到文件中
    7. f.close()
    8. #示例二 wb一般用于图片/音频/视频/未知编码
    9. f=open("a.txt",mode="wb")#
    10. #1.wb:把要写入的字符串以二进制方式写入
    11. data="我好困"
    12. con=data.encode("utf-8")
    13. #将写入的字符串按照的utf-8编码转换成二进制
    14. f.write(con)
    15. #将二进制内容写入文件
    16. f.close()
    17. #示例三rb
    18. f=open("a.txt",mode="rb")#
    19. #直接读取的是二进制数据
    20. data=f.read()
    21. data=f.read(1)#表示一个字节
    22. f.close()
    23. print(data)#打印十六进制
    24. new_data=data.decode("utf-8")#二进制转换成字符串
    25. print(new_data)
7.r+b/w+b/a+b(可读可写二进制)

2.操作

1.读取:

  • read() :从文件当前位置(光标) 开始读取整个文件

  • readline():每次读取一行内容,读取时占用内存较小,适合大文件读取

  • readlines():读取文件所有行(包括换行符,特殊字符会被\转义后存储)存放在一个列表中,每行作为一个元素

  • read(2):读取两个字符,当读取模式以rb 时候 表示两个字节


    1. #1.去除空格
    2. file_object=open("file_test.txt",mode="r",encoding="utf-8")
    3. for line in file_object:
    4. line=line.strip()
    5. #去除内容中每一行的换行,不然会读取文本的换行符 并打印到屏幕
    6. print(line)
    7. # aaaa
    8. # hfh
    9. # jdjf
    10. # jdjjd
    1. #2.read 读取全部文件
    2. data=file_object.read()
    3. print(data)
    4. print(type(data))
    5. #aaaa
    6. #hfh
    7. #jdjf
    8. #jdjjd
    9. #<class 'str'>
    1. #3.readline()读取一行
    2. data=file_object.readline()
    3. print(type(data))#<class 'str'>
    4. while data:#while循环读取 并记录光标位置 直至读完为止
    5. print(data.strip())
    6. data=file_object.readline()
    7. file_object.close()
    8. #你好 fh
    9. #jdjf
    10. #jdjjd
    1. #4.readlines()读取所以行
    2. ata=file_object.readlines()#读取所以行 包括换行符
    3. print(type(data))# <class 'list'>
    4. print(data)# ['你\\\\\\n好 fh\n', 'jdjf\n', 'jdjjd\n']#特殊字符\被转义
    5. for line in data:
    6. print(line)
    7. # 你\\\n好 fh #print("\n")被打印执行
    8. #
    9. # jdjf
    10. #
    11. # jdjjd

2.write()

4.seek():调整光标位置

5.tell():获取当前光标的位置

6.flush():强制将内存的内容刷到硬盘文件中

  1. f=open()
  2. while True:
  3. val=input("请输入:")
  4. f.write(val)
  5. f.flush()#如果不写flush 文件将永远不会关闭 所以内容将永远在内存中 不会保存到硬盘
  6. f.close()

7.关闭

  1. f.close()
  1. with open("a.txt",mode="r"encoding="utf-8") as v:
  2. data=v.read()
  3. #文件执行完毕后将自动关闭

8.文件修改:必须全部拿到内存 进行修改,再重新刷进内存

  1. with open("a.txt",mode="r" encoding="utf-8") as v:
  2. data=v.read()
  3. new_data=data.replace()
  4. with open("a.txt",mode="w" encoding="utf-8") as v:
  5. data=v.write(new_data)
  1. #大文件时候
  2. f1=open("a.txt",mode="r",encoding="utf-8")
  3. f2=open("b.txt",mode="w",encoding="utf-8")
  4. for line in f1:
  5. new_line=line.replace("aa","bb")
  6. f2.write(new_line)
  7. f1.close()
  8. f2.close()
  9. #3.6之后写法
  10. with open("a.txt",mode="r" encoding="utf-8") as f1,with open("b.txt",mode="w" encoding="utf-8") as f2:
  11. for line in f1:
  12. new_line=line.replace("aa","bb")
  13. f2.write(new_line)

3.练习

  1. 练习1:请将user中的元素根据 _ 连接,并写入 'a1.txt' 的文件
  1. 练习1:请将user中的元素根据 _ 连接,并写入 'a1.txt' 的文件
  2. user = ['alex','eric']
  3. con="_".join(user)
  4. file_object=open("gao.txt",mode="w",encoding="utf-8")
  5. file_object.write(con)
  6. file_object.close()
  1. 练习2:请将user中的元素根据 alex|123形式,写入 'a1.txt' 的文件
  1. #练习2:请将user中的元素根据 alex|123形式,并写入 'a1.txt' 的文件
  2. user = [
  3. {'name':'alex','pwd':'123'}, # alex|123
  4. {'name':'eric','pwd':'olbody'}, # eric|olbody
  5. ]
  6. #方案一 读取value值 然后join拼接 加上换行
  7. # file_object=open("gao.txt",mode="w",encoding="utf-8")
  8. # for ele in user:
  9. # ul="|".join(ele.values())
  10. # file_object.write(ul)
  11. # ##alex|123eric|olbody #没有换行
  12. # # ul = ul + "\n"
  13. # # file_object.write(ul)
  14. # #添加回车
  15. # # alex | 123
  16. # # eric | olbody
  17. # file_object.close()
  18. #方案二 占位符实现模式输出
  19. # file_object=open("gao.txt",mode="w",encoding="utf-8")
  20. #
  21. # for ele in user:
  22. # temp="%s|%s\n"%(ele['name'],ele["pwd"],)
  23. # file_object.write(temp)
  24. # file_object.close()

3:请将a1.txt中的文件读取出来并添加到一个列表中

  • 去掉文件内容中读取出来的换行(\n)
  1. 方案一
  1. # 练习3:请将a2.txt中的文件读取出来并添加到一个列表中 ['alex|123','eric|olbody']
  2. file_object=open("gao.txt",mode="r",encoding="utf-8")
  3. data=file_object.read()
  4. file_object.close()
  5. ul=[]
  6. ul.append(data)#data读取出来的字符内容中,包含特殊字符\n 所以会直接放到列表中 ,若直接print(data)则会将”\n”字符串作为一个python语句执行来,所以看不到有\n字符串
  7. print(ul)
  8. print(data)

  1. #去掉换行\n
  2. #方案一 :读取全部内容 然后按照换行来切割
  3. file_object=open("gao.txt",mode="r",encoding="utf-8")
  4. data=file_object.read()
  5. file_object.close()
  6. ul=[]#存放data内容
  7. ul.append(data)
  8. print(ul)#打印data内的全部内容 ['alex|123\neric|olbody\n']
  9. con=data.strip()#去掉字符串两边的换行['alex|123\neric|olbody']
  10. con=con.split("\n")#按照\n切割
  11. list_con=[]
  12. list_con.extend(con)
  13. print(list_con)

D05C82F]1.png)

2.方案二

  1. #方案二 :读取全部内容 一行一行遍历 添加到列表中
  2. result=[]
  3. file_object=open("gao.txt",mode="r",encoding="utf-8")
  4. for line in file_object:
  5. line=line.strip()#去掉每一行换行
  6. result.append((line))
  7. file_object.close()
  8. print(result)

4.总结

  • 文件操作

    • 打开

    • 模式

      • r/w/a(只读只写字符串)

      • r+/w+/a+(可读可写)

      • rb/wb/ab(只读只写二进制)

        • 字符串转换成"二进制"

          v="你好"

          data=v.encode("utf-8")

        • 二进制转换成字符串

          v=""

          data=data.decode("utf-8")

      • r+b/w+b/a+b(可读可写二进制)

    • 操作

        • read():读全部文件
        • read(1):
          1. r:读取一个字符
          2. rb:读取一个字节
        • readline():读取一行
        • readlines():一行一行读取整个文件
      • write

      • seek():调整光标位置

      • tell():获取当前光标的位置

      • flush():强制将内存的内容刷到硬盘文件中

        1. f=open()
        2. while True:
        3. val=input("请输入:")
        4. f.write(val)
        5. f.flush()#如果不写flush 文件将永远不会关闭 所以内容将永远在内存中 不会保存到硬盘
        6. f.close()
      • 关闭

        1. f.close()
      • 文件修改:必须全部拿到内存 进行修改,再重新刷进内存

day08文件操作的更多相关文章

  1. day08——文件操作

    day08 文件操作: open() :打开 f (文件句柄)= open("文件的路径(文件放的位置)",mode="操作文件的模式",encoding=&q ...

  2. day08文件操作的三步骤,基础的读,基础的写,with...open语法,文件的操作模式,文件的操作编码问题,文件的复制,游标操作

    复习 ''' 类型转换 1.数字类型:int() | bool() | float() 2.str与int:int('10') | int('-10') | int('0') | float('-.5 ...

  3. day08 文件操作

    1.三种字符串: (1)u'' 普通字符串 ---> u'abc' ---> 默认的文本方式,以字符作为文本的输出方式 (2)b'' 二进制字符串 ---> b'ASCII码' -- ...

  4. Python集训营45天—Day08 (文件操作)

    目录 1. 文件操作介绍 2. 文件的读写 2.1 文本文件 2.2 二进制文件 2.3 JSON文件 3. 文件的定位,重命名和删除 4. 文件夹的相关操作 1. 文件操作介绍 大家应该听说过一句话 ...

  5. python day08 文件操作

    2019.4.8 S21 day08笔记总结 一.进制 对于计算机而言无论是文件存储 / 网络传输数据本质上都是:二进制(010101010101),如:电脑上存储视频/图片/文件都是二进制: QQ/ ...

  6. Python:Day08 文件操作

    能调用方法的一定是对象! 文件的操作分为三步: 1.打开文件 2.操作文件 3.关闭文件 f= open('小重山','r',encoding='utf8') #以读的方式打开一个文件,如果文件不存在 ...

  7. 铁乐学Python_day08_文件操作

    一.[基本的文件操作] 参数: 1.文件路径: 2.编码方式: 3.执行动作:(打开方式)只读,只写,追加,读写,写读! #1. 打开文件,得到文件句柄并赋值给一个变量 f = open('E:/Py ...

  8. day08(字符编码,字符与字节,文件操作)

    一,复习 ''' 类型转换 1.数字类型:int() | bool() | float() 2.str与int: int('10') | int('-10') | int('0') | float(' ...

  9. day08 python文件操作

    day08 python   一.文件操作     1.文件操作的函数         open(文件名, mode=模式, encoding=字符集)       2.模式: r, w, a, r+ ...

随机推荐

  1. ubuntu 系统开机执行脚本设置

    在ubuntu 系统中常常有一些操作需要开机时手动去执行,有一些固定的脚本文件可以通过改写启动项脚本让系统启动时自动执行 方法: 编辑/etc/下的rc.local脚本,把对应的需要执行的脚本写在ex ...

  2. Mxnet编译安装

    在安装之前请你们自行安装好cuda和cudnn,记得修改环境变量并且source一下,下面讲一下mxnet的安装 严格按照我的所有的指令 sudo apt-get update sudo apt-ge ...

  3. 刷seed有感

    今天又把seed刷了一遍 昨天去了基佬他们公司.第一次去他们公司.米虫科技,在重庆算是一家中型公司吧. 他去公司加班写一个游戏的封面,第一次感觉ui的不给设计图真的很坑.一个页面所有东西 自己凭感觉写 ...

  4. 整数中x出现的次数

    求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1.10.11.12.13因此共出现6次,但是对于后面问题他就没辙了.ACMer ...

  5. git上传到github时犯的错误

    以下是git的正确顺序 git config --global user.name "xxx" 全局注册名字 git config --global user.email &quo ...

  6. Beta冲刺五

    1.团队TSP 团队任务 预估时间 实际时间 完成日期 对数据库的最终完善 120 150 12.2 对学生注册功能的完善--新增触发器 150 140 11.29 对教师注册功能的完善 150 13 ...

  7. 常用MySQL操作(一)

    第二十四次课 常用MySQL操作(一) 目录 一.设置更改root密码 二.连接mysql 三.mysql常用命令 四.mysql用户管理 五.常用sql语句 六.mysql数据库备份恢复 七.扩展 ...

  8. μCOS-Ⅲ——常用注意事项

    **1,**main函数在调用其他函数之前必须先调用OSInit()函数对内核进行初始化. 2,所有的错误类型码都以OS_ERR_为前缀, 3,命名时尽量统一个格式,所有的函数.变量.宏定义和#def ...

  9. 在jsp里面 当鼠标元素触发onmouseover时,旁边出现一个浮动且跟随鼠标的div ,移开消失

    JSP页面 : <label onmouseover="showLongStrlog(window.event, '<list:seqnum></list:seqnu ...

  10. python面向对象之静态属性/静态方法/类方法/组合

    继续学习,不要松懈 #!/usr/bin/env python # coding:utf-8 class Campus: def __init__(self,name,addr,type): self ...