文件的操作包含:读、写、修改

文件的多种操作:

  1. # 读取文件的所有内容
  2. data = open("yesteday.txt", encoding="utf-8") .read()
  3. print(data)
  4.  
  5. ''' f:文件句柄(包含这个文件的文件名,字符集,大小,在硬盘中的起始位置) '''
  6.  
  7. # 'a'=append 追加
  8. f = open("yesteday2.txt", 'a', encoding="utf-8")
  9. f.write("qwerQWER1111\n") #在文件的结尾添加内容
  10. f.close()
  11.  
  12. # 'w'=write 写,覆盖之前的内容
  13. f = open("yesteday2.txt", 'w', encoding="utf-8")
  14. f.write("AAAADDDDD\n")
  15. f.write("CCCCVVVVV\n")
  16. f.close()
  17.  
  18. #'r'=read 只读
  19. f = open("yesteday2.txt", 'r', encoding="utf-8")
  20. print(f.read())
  21. f.close()
  22.  
  23. # 'r+' = r+a 读和在末尾追加
  24. f = open("yesteday.txt", 'r+', encoding='utf-8')
  25. print(f.readline())
  26. print(f.tell())
  27. f.write("---nihao---\n")
  28. print(f.readline()) #无输出结果是因为r+写操作是写在末尾,所以光标到了末尾,读不出来东西了
  29. print(f.tell()) #tell按字符计数,返回光标的位置
  30. f.seek(0) #返回到某个位置
  31. print(f.read())
  32. f.close()
  33.  
  34. # 'w+' = w+r 写和读,写还是只能追加在文件最后
  35. f = open("yesteday.txt", 'w+', encoding='utf-8')
  36. print(f.readline()) #读不到内容,因为w+会新创建一个文件,将原文件的内容清空
  37. f.write("---nihao---\n") #写操作是写在末尾,所以光标到了末尾,读不出来东西了
  38. f.write("---oh,god---\n")
  39. print(f.tell())
  40. f.seek(3)
  41. print(f.tell())
  42. print(f.readline()) #当光标不在一行的开头时,readline读取的内容为光标之后的部分
  43. print(f.tell())
  44. f.write("写在第一行后面") #写操作是写在末尾,即使通过调整光标的位置,也无法将这行写到第一行后面
  45. print(f.tell())
  46. f.seek(0)
  47. print(f.read())
  48. f.close()
  49.  
  50. # 'a+'追加读
  51. f = open("yesteday.txt", 'a+', encoding='utf-8')
  52. print(f.read()) #读不出内容来,因为a+默认光标在结尾
  53. f.write("---nihao---\n")
  54. print(f.tell()) #tell按字符计数,返回光标的位置
  55. f.seek(0) #返回到某个位置
  56. print(f.read())
  57. f.close()
  58.  
  59. # 'rb' = 以二进制格式读文件
  60. f = open("yesteday.txt", 'rb') #不能加encoding的格式
  61. print(f.read())
  62. f.seek(0) #返回到某个位置
  63. print(f.read())
  64. f.seek(0) #返回到某个位置
  65. print(f.read())
  66. f.seek(0) #返回到某个位置
  67. print(f.readline()) #readline读一行
  68. f.close()
  69.  
  70. # 'wb' = 以二进制格式写文件,会清空原文件内容
  71. f = open("yesteday.txt", 'wb') #使用wb时写时需要将字符串变为二进制格式
  72. f.write("hello binary\n".encode()) #将hello binary变为二进制格式后写入文件
  73. f.write("hello binary\n".encode())
  74. f.close()
  75.  
  76. # 'ab' = 以二进制格式追加写文件
  77. f = open("yesteday.txt", 'ab')
  78. f.write("hello binary\n".encode())
  79. f.close()

有关文件的其他方法:

  1. # f = open("yesteday2.txt", 'a+', encoding="utf-8")
  2. # print(f.tell()) #光标在文件最后
  3. # print(f.read(5)) #读取不到内容
  4. # print(f.tell()) #tell按字符计数
  5. # f.seek(3) #返回到某个位置
  6. # print(f.readline()) #当seek回到某行的中间时,下次读取一行时将cut掉前面的部分,读取后面的
  7. # f.seek(3)
  8. # print(f.tell()) #获取文件读取到的位置
  9. # print(f.encoding) #返回文件句柄的编码格式
  10. # print(f.fileno()) #返回编号--操作系统接口
  11. # print(f.seekable()) #是否可以将光标移动回去,能返回True
  12. # print(f.readable()) #判断文件是否可读
  13. # print(f.writable()) #判断文件是否可写
  14. # f.write("1111222333\n")
  15. # f.write("1111222333\n") #写操作会先存在内存缓存区,不是直接写到硬盘,当缓存区达到一个数值时,同时写到硬盘里
  16. # f.flush() # 强制刷新--将缓存区的内容写到硬盘
  17. # f.truncate(10) #截断 ,从指定的位置截断后面的部分,如果不写默认从头开始截断,即清空,seek移动光标没
  18. # f.close() #关闭打开的文件
  19. # print(f.closed) #判断是否关闭了

有关文件读的示例:

  1. # 读五行
  2. f = open("yesteday2.txt", 'r', encoding="utf-8")
  3. for i in range(5):
  4. data = f.readline()
  5. print(data)
  6. f.close()
  7.  
  8. # 读5个字符
  9. f = open("yesteday2.txt")
  10. print(f.tell())
  11. print(f.read(5))
  12. f.close()
  13.  
  14. # 打印除了第三行的其他内容
  15. # enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中
  16. f = open("yesteday2.txt", 'r', encoding="utf-8")
  17. for index,line in enumerate(f.readlines()):
  18. if index == 3:
  19. print("------")
  20. continue
  21. print(line.strip()) # strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列
  22. f.close()
  23.  
  24. # 效率最高,读一行往内存里加一行,读下一行会把内存里的上一行覆盖掉
  25. f = open("yesteday2.txt", 'r', encoding="utf-8")
  26. count = 0
  27. for line in f:
  28. if count == 3:
  29. count += 1
  30. print("----------3-----------")
  31. continue
  32. print(line)
  33. count += 1
  34. f.close()

通过上面的放法,实际并不能完成文件的修改,因为写入文件总是写在文件最后或覆盖掉源文件

通过以下方式可修改文件内容:

  1. >>> testfile.txt
  2. 就像一部电影原谅惨败的票房
  3. 我走在街上闷着头游荡把心事流放
  4. 关掉电话卸下行囊席地坐路旁
  5. 一如乞人不需要形象
  6. 万家灯火带领星光拼出个晚上
  7. 绚烂的欲望涌进了街巷每个虚弱地方
  8. 广场音箱兀自播放某个排行榜
  9. 上榜的歌像背景一样
  10. 那不是歌 那是孤单的歌
  11. 这白马非马的逻辑鲜有附和
  12. 唱着什么 故事里多少曲折
  13. 熙来攘往中几人识得几人识得
  14. 那不是歌 那是我写的歌
  15. 当时的我喜或悲已经记不得
  16. 南辕北辙 破坏热闹气氛的歌
  17. 几人识得几人识得
  18. 被人慌慌张张按掉了
  1. f = open("testfile", "r", encoding="utf-8")
  2. f_new = open("testfile2", "w", encoding="utf-8")
  3.  
  4. for line in f:
  5. if "几人识得" in line:
  6. # '1'代表这一行只修改匹配的第一处
  7. line = line.replace("几人识得", "谁(shui)人识得", 1)
  8. f_new.write(line)
  9. f.close()
  10. f_new.close()

为了防止进行完文件操作后,忘记关闭文件,可以使用with语法:

  1. #为了避免打开文件后忘记关闭,可以通过管理上下文,即
  2. with open("testfile", "r", encoding="utf-8") as f:
  3. for line in f:
  4. print(line)
  5.  
  6. #如此方式,当with代码块执行完毕时,内部会自动关闭 并释放资源
  7. #在py2.7后,with又支持同时对多个文件的上下文进行管理,即
  8. with open("testfile", "r", encoding="utf-8") as f1,\
  9. open("testfile2", "w", encoding="utf-8") as f2:
  10. print(f1.readline())
  11. f2.writable()

Python--文件操作(操作文件)的更多相关文章

  1. python对文件的操作

    一.python中对文件.文件夹操作时经常用到的os模块和shutil模块常用方法. 1.得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd() 2.返回指定目录下的所有文件 ...

  2. Python基础7:文件操作

    [ 文件操作] 1 对文件操作流程 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 现有文件如下: 昨夜寒蛩不住鸣. 惊回千里梦,已三更. 起来独自绕阶行. 人悄悄,帘外月胧 ...

  3. Python 文件常见操作

    # -*-coding:utf8 -*- ''''' Python常见文件操作示例 os.path 模块中的路径名访问函数 分隔 basename() 去掉目录路径, 返回文件名 dirname()  ...

  4. 【Python全栈笔记】05 [模块二] 19 Oct 文件的操作

    文件操作 一般步骤1. 文件打开 2. 文件操作 3. 文件关闭 1. 打开文件 使用open(文件名(绝对路径), 打开模式, 编码) 文件打开的模式有: r:  只读模式(默认) w: 只写模式 ...

  5. Python 第三天 文件操作(2)

    文件操作 操作文件时,一般需要经历如下步骤: 打开文件 操作文件 一.打开 文件句柄 = file('文件路径', '模式') 注:python中打开文件有两种方式,即:open(...) 和  fi ...

  6. python学习笔记4(文件操作)

    文件操作: 1.f=open(”caidan”,”w”,encoding=”utf8”)      直接打开一个文件,如果文件不存在则创建文件 f.close() 2.with open (”caid ...

  7. python学习笔记-(七)python基础--集合、文件操作&函数

    本节内容 1.集合操作 2.文件操作 3.字符编码与转码 4.函数操作 1.集合操作 集合是一个无序的.不重复的数据组合: 1.1 常用操作 它的作用是: 1)自动去重:列表变成集合,自动去重: &g ...

  8. Python自动化 【第三篇】:Python基础-集合、文件操作、字符编码与转码、函数

    1.        集合 1.1      特性 集合是一个无序的,不重复的数据组合,主要作用如下: 去重,把一个列表变成集合实现自动去重. set可以看成数学意义上的无序和无重复元素的集合,因此,两 ...

  9. Python入门笔记(16):对文件的操作(2)

    一.文件系统 从系统角度来看,文件系统是对文件存储器空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统.具体地说,它负责为用户建立文件,存入.读出.修改.转储文件,控制文件的存取,当用 ...

  10. Python入门笔记(15):对文件的操作(1)

    一.文件对象 我理解的文件对象就是一个接口,通过这个接口对文件进行相关操作. <Python 核心编程>上说的很晦涩,这里没有深刻理解到,希望有人能解释给我听. >>> ...

随机推荐

  1. spark机器学习从0到1机器学习工作流 (十一)

        一.概念 一个典型的机器学习过程从数据收集开始,要经历多个步骤,才能得到需要的输出.这非常类似于流水线式工作,即通常会包含源数据ETL(抽取.转化.加载),数据预处理,指标提取,模型训练与交叉 ...

  2. Vue基础:子组件抽取与父子组件通信

    在工作中承担一部分前端工作,主要使用Vue + Element UI. 随着版本迭代,需求增加,页面往往变得更加臃肿,不易维护.学习子组件的封装和抽取,能更好适应需求. 为什么需要子组件 可复用 将重 ...

  3. Java-LinkedList围圈的人名

    import java.util.*; public class Example12_7 { public static void main(String[] args) { int m=5; Lin ...

  4. SpringBoot入门系列(十二)统一日志收集

    前面介绍了Spring Boot 异常处理,不清楚的朋友可以看看之前的文章:https://www.cnblogs.com/zhangweizhong/category/1657780.html. 今 ...

  5. Android_适配器(adapter)之SimpleAdapter

    概述 SimpleAdapter是一种 简单的适配器,将静态数据映射到布局xml对应的视图上.它也是BaseAdapter的子类. SimpleAdapter数据映射的组件有3类(从官网api或Sim ...

  6. [JavaWeb基础] 028.CSS简介和基础语法

    css 概述 CSS 指层叠样式表 (Cascading Style Sheets) 样式定义如何显示 HTML 元素 样式通常存储在样式表中 把样式添加到 HTML 4.0 中,是为了解决内容与表现 ...

  7. SourceTree 配置 GitLab

    生成SSH 创建SSH,执行ssh-keygen -t rsa -C "youremail@example.com",会在.ssh目录下生成id_rsa.id_rsa.pub两个私 ...

  8. group by和having注意事项

    执行和编写顺序:join->where->group by->having 其中where与having的区别: where用于在group by分组之前过滤掉某些行, group ...

  9. 值得注意的Java基础知识

    1)Java语言中默认(即缺省没写出)的访问权限,不同包中的子类不能访问. 中有4中访问修饰符:friendly(默认).private.public和protected. public :能被所有的 ...

  10. thymeleaf怎么在页面上面格式化时间

    th:value="${#dates.format(后端传递的时间,‘yyyy-MM-dd HH:mm:ss’)}"