Python--文件操作(操作文件)
文件的操作包含:读、写、修改
文件的多种操作:
- # 读取文件的所有内容
- data = open("yesteday.txt", encoding="utf-8") .read()
- print(data)
- ''' f:文件句柄(包含这个文件的文件名,字符集,大小,在硬盘中的起始位置) '''
- # 'a'=append 追加
- f = open("yesteday2.txt", 'a', encoding="utf-8")
- f.write("qwerQWER1111\n") #在文件的结尾添加内容
- f.close()
- # 'w'=write 写,覆盖之前的内容
- f = open("yesteday2.txt", 'w', encoding="utf-8")
- f.write("AAAADDDDD\n")
- f.write("CCCCVVVVV\n")
- f.close()
- #'r'=read 只读
- f = open("yesteday2.txt", 'r', encoding="utf-8")
- print(f.read())
- f.close()
- # 'r+' = r+a 读和在末尾追加
- f = open("yesteday.txt", 'r+', encoding='utf-8')
- print(f.readline())
- print(f.tell())
- f.write("---nihao---\n")
- print(f.readline()) #无输出结果是因为r+写操作是写在末尾,所以光标到了末尾,读不出来东西了
- print(f.tell()) #tell按字符计数,返回光标的位置
- f.seek(0) #返回到某个位置
- print(f.read())
- f.close()
- # 'w+' = w+r 写和读,写还是只能追加在文件最后
- f = open("yesteday.txt", 'w+', encoding='utf-8')
- print(f.readline()) #读不到内容,因为w+会新创建一个文件,将原文件的内容清空
- f.write("---nihao---\n") #写操作是写在末尾,所以光标到了末尾,读不出来东西了
- f.write("---oh,god---\n")
- print(f.tell())
- f.seek(3)
- print(f.tell())
- print(f.readline()) #当光标不在一行的开头时,readline读取的内容为光标之后的部分
- print(f.tell())
- f.write("写在第一行后面") #写操作是写在末尾,即使通过调整光标的位置,也无法将这行写到第一行后面
- print(f.tell())
- f.seek(0)
- print(f.read())
- f.close()
- # 'a+'追加读
- f = open("yesteday.txt", 'a+', encoding='utf-8')
- print(f.read()) #读不出内容来,因为a+默认光标在结尾
- f.write("---nihao---\n")
- print(f.tell()) #tell按字符计数,返回光标的位置
- f.seek(0) #返回到某个位置
- print(f.read())
- f.close()
- # 'rb' = 以二进制格式读文件
- f = open("yesteday.txt", 'rb') #不能加encoding的格式
- print(f.read())
- f.seek(0) #返回到某个位置
- print(f.read())
- f.seek(0) #返回到某个位置
- print(f.read())
- f.seek(0) #返回到某个位置
- print(f.readline()) #readline读一行
- f.close()
- # 'wb' = 以二进制格式写文件,会清空原文件内容
- f = open("yesteday.txt", 'wb') #使用wb时写时需要将字符串变为二进制格式
- f.write("hello binary\n".encode()) #将hello binary变为二进制格式后写入文件
- f.write("hello binary\n".encode())
- f.close()
- # 'ab' = 以二进制格式追加写文件
- f = open("yesteday.txt", 'ab')
- f.write("hello binary\n".encode())
- f.close()
有关文件的其他方法:
- # f = open("yesteday2.txt", 'a+', encoding="utf-8")
- # print(f.tell()) #光标在文件最后
- # print(f.read(5)) #读取不到内容
- # print(f.tell()) #tell按字符计数
- # f.seek(3) #返回到某个位置
- # print(f.readline()) #当seek回到某行的中间时,下次读取一行时将cut掉前面的部分,读取后面的
- # f.seek(3)
- # print(f.tell()) #获取文件读取到的位置
- # print(f.encoding) #返回文件句柄的编码格式
- # print(f.fileno()) #返回编号--操作系统接口
- # print(f.seekable()) #是否可以将光标移动回去,能返回True
- # print(f.readable()) #判断文件是否可读
- # print(f.writable()) #判断文件是否可写
- # f.write("1111222333\n")
- # f.write("1111222333\n") #写操作会先存在内存缓存区,不是直接写到硬盘,当缓存区达到一个数值时,同时写到硬盘里
- # f.flush() # 强制刷新--将缓存区的内容写到硬盘
- # f.truncate(10) #截断 ,从指定的位置截断后面的部分,如果不写默认从头开始截断,即清空,seek移动光标没
- # f.close() #关闭打开的文件
- # print(f.closed) #判断是否关闭了
有关文件读的示例:
- # 读五行
- f = open("yesteday2.txt", 'r', encoding="utf-8")
- for i in range(5):
- data = f.readline()
- print(data)
- f.close()
- # 读5个字符
- f = open("yesteday2.txt")
- print(f.tell())
- print(f.read(5))
- f.close()
- # 打印除了第三行的其他内容
- # enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中
- f = open("yesteday2.txt", 'r', encoding="utf-8")
- for index,line in enumerate(f.readlines()):
- if index == 3:
- print("------")
- continue
- print(line.strip()) # strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列
- f.close()
- # 效率最高,读一行往内存里加一行,读下一行会把内存里的上一行覆盖掉
- f = open("yesteday2.txt", 'r', encoding="utf-8")
- count = 0
- for line in f:
- if count == 3:
- count += 1
- print("----------3-----------")
- continue
- print(line)
- count += 1
- f.close()
通过上面的放法,实际并不能完成文件的修改,因为写入文件总是写在文件最后或覆盖掉源文件
通过以下方式可修改文件内容:
- >>> testfile.txt
- 就像一部电影原谅惨败的票房
- 我走在街上闷着头游荡把心事流放
- 关掉电话卸下行囊席地坐路旁
- 一如乞人不需要形象
- 万家灯火带领星光拼出个晚上
- 绚烂的欲望涌进了街巷每个虚弱地方
- 广场音箱兀自播放某个排行榜
- 上榜的歌像背景一样
- 那不是歌 那是孤单的歌
- 这白马非马的逻辑鲜有附和
- 唱着什么 故事里多少曲折
- 熙来攘往中几人识得几人识得
- 那不是歌 那是我写的歌
- 当时的我喜或悲已经记不得
- 南辕北辙 破坏热闹气氛的歌
- 几人识得几人识得
- 被人慌慌张张按掉了
- f = open("testfile", "r", encoding="utf-8")
- f_new = open("testfile2", "w", encoding="utf-8")
- for line in f:
- if "几人识得" in line:
- # '1'代表这一行只修改匹配的第一处
- line = line.replace("几人识得", "谁(shui)人识得", 1)
- f_new.write(line)
- f.close()
- f_new.close()
为了防止进行完文件操作后,忘记关闭文件,可以使用with语法:
- #为了避免打开文件后忘记关闭,可以通过管理上下文,即
- with open("testfile", "r", encoding="utf-8") as f:
- for line in f:
- print(line)
- #如此方式,当with代码块执行完毕时,内部会自动关闭 并释放资源
- #在py2.7后,with又支持同时对多个文件的上下文进行管理,即
- with open("testfile", "r", encoding="utf-8") as f1,\
- open("testfile2", "w", encoding="utf-8") as f2:
- print(f1.readline())
- f2.writable()
Python--文件操作(操作文件)的更多相关文章
- python对文件的操作
一.python中对文件.文件夹操作时经常用到的os模块和shutil模块常用方法. 1.得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd() 2.返回指定目录下的所有文件 ...
- Python基础7:文件操作
[ 文件操作] 1 对文件操作流程 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 现有文件如下: 昨夜寒蛩不住鸣. 惊回千里梦,已三更. 起来独自绕阶行. 人悄悄,帘外月胧 ...
- Python 文件常见操作
# -*-coding:utf8 -*- ''''' Python常见文件操作示例 os.path 模块中的路径名访问函数 分隔 basename() 去掉目录路径, 返回文件名 dirname() ...
- 【Python全栈笔记】05 [模块二] 19 Oct 文件的操作
文件操作 一般步骤1. 文件打开 2. 文件操作 3. 文件关闭 1. 打开文件 使用open(文件名(绝对路径), 打开模式, 编码) 文件打开的模式有: r: 只读模式(默认) w: 只写模式 ...
- Python 第三天 文件操作(2)
文件操作 操作文件时,一般需要经历如下步骤: 打开文件 操作文件 一.打开 文件句柄 = file('文件路径', '模式') 注:python中打开文件有两种方式,即:open(...) 和 fi ...
- python学习笔记4(文件操作)
文件操作: 1.f=open(”caidan”,”w”,encoding=”utf8”) 直接打开一个文件,如果文件不存在则创建文件 f.close() 2.with open (”caid ...
- python学习笔记-(七)python基础--集合、文件操作&函数
本节内容 1.集合操作 2.文件操作 3.字符编码与转码 4.函数操作 1.集合操作 集合是一个无序的.不重复的数据组合: 1.1 常用操作 它的作用是: 1)自动去重:列表变成集合,自动去重: &g ...
- Python自动化 【第三篇】:Python基础-集合、文件操作、字符编码与转码、函数
1. 集合 1.1 特性 集合是一个无序的,不重复的数据组合,主要作用如下: 去重,把一个列表变成集合实现自动去重. set可以看成数学意义上的无序和无重复元素的集合,因此,两 ...
- Python入门笔记(16):对文件的操作(2)
一.文件系统 从系统角度来看,文件系统是对文件存储器空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统.具体地说,它负责为用户建立文件,存入.读出.修改.转储文件,控制文件的存取,当用 ...
- Python入门笔记(15):对文件的操作(1)
一.文件对象 我理解的文件对象就是一个接口,通过这个接口对文件进行相关操作. <Python 核心编程>上说的很晦涩,这里没有深刻理解到,希望有人能解释给我听. >>> ...
随机推荐
- spark机器学习从0到1机器学习工作流 (十一)
一.概念 一个典型的机器学习过程从数据收集开始,要经历多个步骤,才能得到需要的输出.这非常类似于流水线式工作,即通常会包含源数据ETL(抽取.转化.加载),数据预处理,指标提取,模型训练与交叉 ...
- Vue基础:子组件抽取与父子组件通信
在工作中承担一部分前端工作,主要使用Vue + Element UI. 随着版本迭代,需求增加,页面往往变得更加臃肿,不易维护.学习子组件的封装和抽取,能更好适应需求. 为什么需要子组件 可复用 将重 ...
- Java-LinkedList围圈的人名
import java.util.*; public class Example12_7 { public static void main(String[] args) { int m=5; Lin ...
- SpringBoot入门系列(十二)统一日志收集
前面介绍了Spring Boot 异常处理,不清楚的朋友可以看看之前的文章:https://www.cnblogs.com/zhangweizhong/category/1657780.html. 今 ...
- Android_适配器(adapter)之SimpleAdapter
概述 SimpleAdapter是一种 简单的适配器,将静态数据映射到布局xml对应的视图上.它也是BaseAdapter的子类. SimpleAdapter数据映射的组件有3类(从官网api或Sim ...
- [JavaWeb基础] 028.CSS简介和基础语法
css 概述 CSS 指层叠样式表 (Cascading Style Sheets) 样式定义如何显示 HTML 元素 样式通常存储在样式表中 把样式添加到 HTML 4.0 中,是为了解决内容与表现 ...
- SourceTree 配置 GitLab
生成SSH 创建SSH,执行ssh-keygen -t rsa -C "youremail@example.com",会在.ssh目录下生成id_rsa.id_rsa.pub两个私 ...
- group by和having注意事项
执行和编写顺序:join->where->group by->having 其中where与having的区别: where用于在group by分组之前过滤掉某些行, group ...
- 值得注意的Java基础知识
1)Java语言中默认(即缺省没写出)的访问权限,不同包中的子类不能访问. 中有4中访问修饰符:friendly(默认).private.public和protected. public :能被所有的 ...
- thymeleaf怎么在页面上面格式化时间
th:value="${#dates.format(后端传递的时间,‘yyyy-MM-dd HH:mm:ss’)}"