python记录_day08
今日内容:文件操作
一、文件基本操作
f = open("文件路径和文件名", mode=" r", encoding="utf-8" )
# open()表示打开一个文件,返回的是一个流,可以理解为操作文件的句柄
# f 变量 将控制文件的句柄赋值给它
read() # 将文件一次性全部读取 弊端:占内存 如果文件过大,容易导致内存崩溃
read(n) # 光标处读取n个字符
readline() #一次读取一行 !!!注意每次读取出来的数据都会有一个\n 所以呢. 需要我们使用strip()来去掉\n或者空格
readlines() # 返回一个列表,元素是每一行的内容 也容易出现内存崩溃问题
推荐使用循环读取
for line in f :
print(line.strip())
每次读取一行,不会出现内存溢出的问题
二、路径问题
绝对路径:从磁盘根目录开始一直到文件名
相对路径:相对程序所在文件夹来说的
三、文件操作模式 mode
r 只读 w 只写 a 追加
rb 读字节 wb 写字节 ab 追加字节
r+ 读写 w+ 写读 a+ 追加、读 (+号可以理解为功能扩展)
r+b 读写字节 w+b写读字节 a+b追加、读、字节
注意:
1、这些只是常见的但并不是全部的
2、常用的是r 、w、r+模式
3、只要是a或者ab, a+ 都是在文件的末尾写入. 不论光标在任何位置
4、带b的就是把字符换成字节. 仅此而已
四、光标操作
可以把光标理解为定位文件操作起点的标记。不管是读写还是其他操作都要都一个开始的位置,光标的的作用就是告诉程序这个位置。
seek(n) #光标移动到n位置 !1!单位是字节
seek(参数1,参数2) # 参数1是偏移量,参数2是从什么位置开始偏移 0表示开头,1表示当前位置,2表示末尾
seek(0) 定位到开头
seek(0,2)定位到末尾
tell() # 获取光标当前位置 单位也是字节
truncate() # 截断 删除光标后所有内容
深坑请注意!!!
在r+模式下. 如果读取了内容. 不论读取内容多少. 光标显示的是多少. 再写入 或者操作文件的时候都是在结尾进行的操作.
所以如果想做截断操作. 记住了. 要先挪动光标. 挪动到你想要截断的位置. 然后再进行截断
关于truncate(n), 如果给出了n. 则从开头进行截断,不管光标在何处, 如果不给n, 则从当前位置截断. 后面的内容将会被删除
ex:
小娃娃.txt 内容
小娃娃想吃冰糖葫芦了
f = open("小娃娃.txt",mode="r+",encoding="utf-8") #小娃娃想吃冰糖葫芦了
content = f.read(3) #读取3个字符
print(f.tell()) #
f.write("买不买") # 按道理应该在字节9的位置写入,可结果是在最后写入的 小娃娃想吃冰糖葫芦了买不买
print(content) #小娃娃
f.flush()
f.close() f1 = open("小娃娃.txt",mode="r+",encoding="utf-8")
content = f1.read(3) #读取3个字符
print(f1.tell()) #
f1.truncate() # 按说应该从开头截取的光标9的位置,但结果是从开头截到了结尾
f1.seek(6)
f1.truncate() #小娃 挪动光标后截取了
f1.flush()
f1.close()
五、文件修改
只能将文件中的内容读取到内存中, 将信息修改完毕, 然后将源文件删除, 将新文件的名字改成老文件的名字
# 文件修改步骤: 从源文件读取 --> 修改-->写入副本-->删除源文件-->重命名副本
import os
with open("小娃娃.txt",mode="r",encoding="utf-8") as f1, \
open("小娃娃副本.txt",mode="w",encoding="utf-8") as f2:
content = f1.read()
new_content = content.replace("小娃娃","小屁孩儿")
f2.write(new_content)
os.remove("小娃娃.txt")
os.rename("小娃娃副本.txt","小娃娃.txt")
# 这种写法有弊端, 一次将内容进行读取,容易造成内存溢出,推荐一行一行读取 with open("小娃娃.txt",mode="r",encoding="utf-8") as f1, \
open("小娃娃副本.txt",mode="w",encoding="utf-8") as f2 :
for line in f1:
new_line = line.replace("小娃娃","小屁孩儿")
f2.write(new_line) os.remove("小娃娃.txt")
os.rename("小娃娃.txt","小娃娃副本.txt")
文件修改
python记录_day08的更多相关文章
- python记录点
python记录点 文件编码 Unicode使用最少2个字节(1个字节=1BYTE=8bit=一个长度为8的二进制数) 来表示字母和符号等,有时候是4个字节. UTF-8是对Unicode编码的压缩和 ...
- Python记录1:基础知识常识
今日内容: 一,Python的数据类型 Python一共有以下几种常见的数据类型:int(整形) float(浮点型) str(字符串) list(列表) tuple元组 dict(字典) ...
- python记录_day019 类的约束 异常处理 日志
一 .约束 python中约束有两种 第一种,通过抛异常进行约束,这种是子类不按我要求的来,我就给你抛异常(推荐) 操作:提取一个父类. 在父类中给出一个方法.但在方法中不给出任何代码,直接抛异常 # ...
- python记录_day10 动态传参 命名空间 作用域
一.动态传参 动态传参用到 *args 和 **kwargs ,*号表示接收位置参数,args是参数名:**表示接收关键字参数,kwargs是参数名 def chi(*food): print(foo ...
- Python记录键盘鼠标敲击次数
Idea 作为一个每天有一半时间都在电脑旁的人,无时无刻不在敲击着键盘,点击着鼠标.有一天,我突然很想知道在一天的时间内,在我轻盈的指法下面,键盘被我狂敲了多少下,鼠标又被我点击了多少次.甚至更具体一 ...
- Python - 记录我开始学习Python的时间节点
记录我开始学习Python的时间节点 2019-09-22 从明天开始我要开始学习Python了,坚持学习.坚持写博客,慢慢积累. 结合实例项目,最好能把目前在做的项目用Python实现. 加油!
- 笨办法学Python记录--习题18 变量 函数 help的由来;if语句,循环和列表,冒泡排序,判断输入字符串的方法
20140414 记录 习题17 - 33 函数可以做3件事: 1. 给代码片段命名,,就跟“变量”给字符串和数字命名一样. 2. 可以接受参数,就跟你的脚本接受argv 一样. 3. 通过使用#1 ...
- 笨办法学Python记录--习题1-11
20140412(习题1-10),和打印较劲: 1. 读这本书时没有按照要求安装Python2,我选择的是最新版3.4.0(官方release),然后悲剧发现完全不兼容,现在摘录2,3区别: 这个星期 ...
- Python记录-Pip安装
1.第一步 下载py文件:https://bootstrap.pypa.io/ez_setup.py #!/usr/bin/env python """ Setuptoo ...
随机推荐
- 今日头条 CEO 张一鸣:面试了 2000 个年轻人,混得好的都有这 5 种特质
https://blog.csdn.net/qq_35246620/article/details/72801285 博主说:多了解了解总是好的. 正文 张一鸣算是 80 后中绝对的佼佼者.1983 ...
- Python入门 值内存管理与所有的关键字
值内存管理 Python采用的是基于值得内存管理方式,如果为不同变量赋值为相同值,这个值在内存中只有一份,多个变量指向同一块内存地址. id(x) : 用于返回变量所指值的内存地址 x = 3 pri ...
- 题解——洛谷P3812【模板】线性基
学了下线性基 使用好像并不复杂 打了板子 但是要注意位运算优先级 #include <cstdio> #include <algorithm> #include <cst ...
- js中获取当前浏览器类型
本文为博主原创,转载请注明出处: 在应用POI进行导出时,先应用POI进行数据封装,将数据封装到Excel中,然后在进行download下载操作,从而完成 POI导出操作.由于在download操作时 ...
- mysql中between...and..的使用,及时间范围的查询
博主原创,转载注明出处: 在mysql应用中,以范围进行查询的很多是以时间范围作为条件进行范围查询的,时间范围查询有 很多种写法,首先总结一下between....and...的使用方法: <s ...
- usart2 重映射
今天拾起闲置很久的灰机,测试发现nrf2401坏掉,重新淘宝.还发现机上搭载的usart1坏掉,换成usart2,发现端口被电机占用,重映射到PD5,PD6 关键是后面两句不要忘记了 RCC_APB1 ...
- 清除浏览器CSS样式
/* YUI 3.18.1 (build f7e7bcb) Copyright 2014 Yahoo! Inc. All rights reserved. Licensed under the BSD ...
- forEach、map、filter、find、sort、some等易错点整理
一.常用方法解析 说起数组操作,我们肯定第一反应就是想到forEach().map().filter()等方法,下面分别阐述一下各方法的优劣. 1.forEach 1.1 基础点 forEac ...
- 5+ App开发打包指南
HTML5 Plus应用概述 HTML5 Plus移动App,简称5+App,是一种基于HTML.JS.CSS编写的运行于手机端的App,这种App可以通过扩展的JS API任意调用手机的原生能力,实 ...
- vue--v-model表单控件绑定
原文链接:https://www.cnblogs.com/dyfbk/p/6868350.html v-model 指令在表单控件元素上创建双向数据绑定,下面一一进行示例解释. 1.v-model 双 ...