Python全栈之路----文件处理
文件操作分为读、写、修改,我们先从读开始
f = open(file = 'D:/工作日常/ABCD.txt',mode = 'r',encoding = 'utf-8') #file 是文件路径 mode = 'r' 是只读模式,encoding是文件使用的编码
f = open(file ='D:/工作日常/ABCD.txt',mode = 'rb') #读出来是二进制格式,只是给机器看,用于网络传输
data = f.read()
f.close
智能监测编码
原理:gbk两个字节表示一个字符,utf-8三个字节表示一个字符。所以,一段拥有十个字节的编码不可能是utf-8。
import chardet #需要从第三方工具箱单独安装
f = open('log', mode='rb')
data = f.read()
f.close()
result = chardet.detect(open('log', mode = 'rb').read())
print(result)
写模式操作文件
f = open('Mary.text', 'r', encoding = 'gbk')
for line in f: #一次取一行
print(line) #print本身自带换行,所以输出结果在每两行之间会多一行空行
f.close()
写文件 w:创建,会清空之前文件的所有内容
f = open(file='D:\电视剧.txt',mode='w',encoding='gbk') #创建一个新文件,写入
f.write('倾城之恋')
f.close()
f = open('电视剧2.txt','wb') #在pycharm的目录下,创建一个新文件,写入
f.write('倾城之恋'.encode('gbk')) #写入之后,需要用’gbk‘编码才能打开
f.close()
f = open('电视剧2.txt','wb')
f.write('蓝色生死恋'.encode('gbk')) #清空原来的重新输入
f.close()
追加模式操作文件 a
f = open('电视剧.txt','a',encoding='gbk') #在原文件内容后进行添加
f.write('\t蓝色生死恋')
f.close()
混合操作文件
f = open('电视剧.txt','r+',encoding='gbk') #读写模式,相当于以读的方式打开,支持追加内容
data = f.read() #可以读内容
print(data) #print("content",data)
f.write(' 何以笙箫默') #可以写 f.write("\n new line") 此时光标移动到了最后,无可读内容
print(f.read()) #print("new content",f.read()) 故,print为空
f.close()
f = open('电视剧.txt','w+',encoding='gbk') #写读模式,相当于以创建的方式打开文件
data = f.read() #可以读内容
print(data) #print("content",data)
f.write(' 何以笙箫默') #可以写 f.write("\n new line") 文件里只有新写的内容,原内容已被清空
print(f.read()) #print("new content",f.read())
f.close()AAAF
文件操作的其他方法
def fileno(self,*args,**kwargs): # real signature unknown
#返回文件句柄在内核中的索引值,以后做I0多路复用(网络编程)时可以用到
def flush(self,*args,**kwargs): # real signature unknown
#把文件从内存buffer里强制刷新到硬盘
f = open('电视剧.txt','w')
f.write('花间提壶方大厨')
f.flush() #避免了因临时断电而产生已打印出的文字消失的情况
def readable(self,*args,**kwargs): # real signature unknown
#判断是否可读 linux里一切皆文件,即使是网卡驱动也是文件,但网卡驱动不可读,一般用不到。'w'也不可读
def readline(self,*args,**kwargs): # real signature unknown
#只读一行,遇到 \r or \n 为止
def seek(self,*args,**kwargs): # real signature unknown
#把操作的光标移到指定位置
#*注意seek的长度是按字节算的,字符编码存每个字符所占的字节长度不一样
#如“路飞学城”用gbk存是2个字节一个字,用utf-8是3个字节一个字,
#因此,以gbk打开时,seek(4)就会把光标切换到第四个字节之后的位置,但如果是utf-8,seek(4)会导致,拿到了“飞”这个字的一部分字节,打印的话会报错,
#因为处理剩下的文本时发现用这个会出错
f.seek(0) #返回文件开头
def seekable(self,*args,**kwargs): # real signature unknown
#判断文件是否可进行seek操作 linux上一切皆文件,终端也是文件,但是不能进行seek操作
def tell(self,*args,**kwargs): # real signature unknown
#返回当前文件操作光标的位置
def truncate(self,*args,**kwargs): # real signature unknown
#按指定长度截断文件
#*指定长度的话,就从文件开头开始截断指定长度,不指定长度的话,就从当前位置到文件尾部的内容全部去掉
f.truncate(n) #从文件开头开始截取长度为n的部分
def writable(self,*args,**kwargs): # real signature unknown
#判断文件是否可写
tell和seek找的是字节,read找的是字符
文件修改操作
f = open("电视剧.txt", 'r+', encoding = 'gbk') #只能覆盖,不能后移
f.seek(6)
f.write("[路飞学城 luffycity]") #因为英文字符占位和中文不一样,可能会出现乱码
f.close()
多数电脑修改文件都是把文件从硬盘提到内存,这样面临的问题就是,内存如果不够大,文件就无法完全修改,同时,如果突然断电,会失去所有修改信息。
还有一种占硬盘的修改方式是,在硬盘里创建一个新文件,从原文件里提取出一条一条的信息,检测是否需要修改,如果需要就修改后放到新文件里,不需要就直接放到新文件里。
import os f_name = '电视剧.txt'
f_new_name = '%s.new'%f_name old_str = '蓝色'
new_str = '蓝色生死恋' f = open(f_name,'r',encoding='gbk')
f_new = open(f_new_name,'w',encoding='gbk') for line in f:
if old_str in line:
line = line.replace(old_str,new_str) f_new.write(line) f.close()
f_new.close() os.rename(f_new_name,f_name)
Python全栈之路----文件处理的更多相关文章
- Python全栈之路----目录
Module1 Python基本语法 Python全栈之路----编程基本情况介绍 Python全栈之路----常用数据类型--集合 Module2 数据类型.字符编码.文件操作 Python全栈之路 ...
- Python全栈之路目录结构
基础 1.Python全栈之路-----基础篇 2.Python全栈之路---运算符与基本的数据结构 3.Python全栈之路3--set集合--三元运算--深浅拷贝--初识函数 4.Python全栈 ...
- Python全栈之路----常用模块----hashlib加密模块
加密算法介绍 HASH Python全栈之路----hash函数 Hash,一般翻译做“散列”,也有直接音译为”哈希”的,就是把任意长度的输入(又叫做预映射,pre-image),通过散列 ...
- python 全栈之路
目录 Python 全栈之路 一. Python 1. Python基础知识部分 2. Python -函数 3. Python - 模块 4. Python - 面对对象 5. Python - 文 ...
- Python全栈之路----函数----返回值
函数外部的代码想要获取函数的执行结果,就可以在函数里用return语句,把结果返回. def stu_register(name,age,course='PY',country='CN'): prin ...
- Python全栈之路----常用模块学习----模块的种类和导入方法
什么是模块? 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码 ...
- python全栈测试之路-py3基础:基础的常用语法知识
python基础链接 python3速查参考- python基础 2 -> if语句应用 + while循环应用 https://www.cnblogs.com/wuzhiming/p/7795 ...
- Python全栈之路4--内置函数--文件操作
上节重点回顾: 判断对象是否属于某个类,例如: 列表中有个数字,但是循环列表判断长度,用len会报错;因为int不支持len,所以要先判断属于某个类,然后再进行if判断. # isinstance(对 ...
- Python全栈之路----常用模块----软件开发目录规范
目录基本内容 log #日志目录 conf #配置目录 core/luffycity #程序核心代码目录 #luffycity 是项目名,建议用小写 libs/modules #内置模块 d ...
随机推荐
- oracle 连接问题汇总
遇到的情况: 1/后台配置完好,若是连其他的库都是好的,当连接另外的库时,始终连接不上,这是需要考虑到服务端安装文件tnsnames文件中服务名在客户端的安装文件tnsnames文件中是否存在
- visualSFM
Ubuntu18.04配置VisualSFM参考:https://www.jianshu.com/p/cc0b548313e9 VisualSFM有GPU和NO_GPU两个版本,本文安装VisualS ...
- JVM运行时内存模型
JDK1.7版本图 一,栈 基本数据类型的局部变量是直接保存在栈中. 栈帧:一个栈里面会包含多个栈帧,每一个栈帧代表一个方法的开始到结束,它涵盖了整个方法运行期间所有的操作和数据 栈帧 1:局部变 ...
- Spring.Net —IOC详解
一. Spring.net中IOC介绍 1. 什么是IOC,控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度.其中 ...
- CAM(Content Addressable Memory)介绍
CAM是一种特殊的存储器.所谓CAM,即内容寻址存储器.CAM存储器在其每个存储单元都包含了一个内嵌的比较逻辑,写入CAM的数据会和其内部存储的每一个数据进行比较,并返回与端口数据相同的所有内部数据的 ...
- 查看值是否传过来php
<input value='{{mid}}'></input> <input value='{{share}}'></input>
- 关于IDEA每次修改HTML,Css等静态资源文件都需要重启的设置修改
~ ~ ~ ~ ~ 关于IDEA每次修改HTML,Css等静态资源文件都需要重启的设置修改 最近开始使用IDEA进行项目开发,但是对于每次修改HTML文件中css和js文件之后都必须重启服务这件事表示 ...
- Highcharts 时间格式化函数
1.函数构造: Highcharts.dateFormat(String format, [Number time], [Boolean capitalize]) 2.参数列表: Strin ...
- linux 基础命令,未完待续
1, cd 进入系统根目录 cd / 进入当前用户的主目录 cd ~ 进入当前目录的上一级目录 cd .. 跳转到指定目录,从根目录开始 cd /apps/ 2, pwd 查看当前工作目录的完整路径 ...
- 谈谈 iOS 中图片的解压缩
原文 对于大多数 iOS 应用来说,图片往往是最占用手机内存的资源之一,同时也是不可或缺的组成部分.将一张图片从磁盘中加载出来,并最终显示到屏幕上,中间其实经过了一系列复杂的处理过程,其中就包括了对图 ...