Python_008(文件操作)
一.文件操作
1.只读操作
f = open("taibai.txt",mode = "r",encoding = "utf-8"
s = f.read()
f.flush()
f.close()
print(s)
#输出结果:你在taibai.txt文件里的内容
这里有几个注意点:
a:第一关于路径的问题:taibai.txt;一般在pycharm外创建的文件都带后缀名,所以关于路径要跟你文件命名一致;
b:mode是表示想要执行什么操作, encoding:编码格式,一般在文件外创建的文件可能不是utf-8编码的,所以这里要注意;encoding也要根据mode的模式,如果mode是读模式,那enconding就是解码,如果是写,那enconding是编码;在python中mode和encoding默认值是mode = 'r',encoding = 'utf-8';
c:f.flush()代表刷新, f.close()是关闭句柄f, 这两句话一般要带上;
关于编码格式这一块:
encoding表示的是编码集,根据文件的实际保存编码进行获取数据,平常用到的最多的时候utf-8;
所以引出一种写类型:rb:读取出来的数据是bytes类型,在rb模式下,不用选择encoding字符集,因为你本身
读出来的就是字节;
代码展示:
f = open("../ha/hh.txt",mode="rb")
s = f.read()
f.flush()
f.close()
print(s)
s1 = s.decode("GBK")
print(s1)
8 s1 = s1.encode("utf-8")
print(s1)
#输出结果:
b'\xc1\xf5\xb2\xa9\xce\xc4'
刘博文
b'\xe5\x88\x98\xe5\x8d\x9a\xe6\x96\x87'
注意这里不能直接f = open("../ha/hh.txt",mode="r",encoding = "utf-8")这是会报错的,因为通过上面可以看出,我这个文件是
用"GBK"编码的,所以用rb读取字节,得到GBK编码的字节,然后用s.decode("GBK")解码成万国码,也就是字符串;
最后用utf-8编码了一遍;得到s1;
rb的作用:在读取非文本文件的时候,比如在读取MP3,图像,视频等信息的时候就需要用到rb,因为这种数据是没办法显
出来的,在后面我们文件上传下载的时候还会用到,直播也是这种数据;
2.绝对路径和相对路径的问题
a:绝对路径:从磁盘根目录开始一直到文件名
b:相对路径:同一个文件夹下的文件,相对于当前这个程序所在的文件夹而言,如果在同一个文件夹中,则相对路径就是
这个文件名,如果在上一层,则要../
3.文件写操作
a:写模式下,如果没有文件夹,则会自动创建文件,如果文件存在,则将原来的内容全部清空,再写入新内容;
f = open("小护士",mode='w',encoding="utf-8")
f.write("答案似乎是")
f.flush()
f.close()
#输出结果:
创建了一个新文件,
名字为小护士,
内容为:答案似乎是
注意:在读的状态下不能写,在写的状态下不能读;否则报错;
b:wb模式下,可以不指定打开文件的编码,但是在写文件的时候必须将字符串转化成utf-8的bytes数据;
f = open("../ha/hh.txt",mode="wb")
2 # f.write("答案似乎是".encode("utf-8"))
f.flush()
f.close()
#输出结果:
在外部的文件中,我的文件内容已经改为
答案似乎是 , 而且编码格式为utf-8
注意:只要是有W的,都是原文件清空,替换成新数据;这跟open有关,open每一次打开,才会清空;
3.a追加模式
a:我们写入的内容会追加到文件的结尾,不会清空原来的文件数据;若没有这个文件,也会自动添加;
f = open("../ha/hh.txt",mode="a",encoding="utf-8")
f.write("刘博文是狗")
f.flush()
f.close()
#输出结果:
在文件中追加了一句话,没有清空该文件;
4.r+只读模式下进行了扩展
a:先读后写,必须的有这个文件
f = open("小护士",mode="r+",encoding="utf-8")
s = f.read()
f.write("周杰")
f.flush()
f.close()
print(s) #输出结果:
答案似乎是
小白
疾风剑豪
诺克萨斯
#因为这里是先读后写,所以后来写入的没有显示出来
但是在小护士的文件中已经添加了
b:先写后读
a:在r+模式下,默认情况下光标在文件的开头,所以如果先写后读:
f = open("小护士",mode="r+",encoding="utf-8")
f.write("周润发")
s = f.read()
f.flush()
f.close()
print(s)
#输出结果:
乎是
小白
疾风剑豪
诺克萨斯周杰
#注意这里 答案似乎是 前三个字被周润发覆盖掉了
所以读的时候从光标往后读,就是当前输出结果;
r+模式下,默认情况下光标在文件的开头,所以会直接覆盖前面的三个文字
所以保险起见,要先读后写;
5.w+写读
先将所有内容清空,然后写入,最后读取,但是光标在最后一位了,读取的内容是空的,不常用;
f = open("小护士",mode="w+",encoding="utf-8")
f.write("周润发")
s = f.read()
f.flush()
f.close()
print(s)
#输出结果:
空
如果想要读取内容,先把光标调到开头:
f = open("小护士",mode="w+",encoding="utf-8")
f.write("周润发")
f.seek(0)
s = f.read()
f.flush()
f.close()
print(s)
#输出结果:
周润发
6.a+
在a+模式下文件可以写读,如果不改变光标,不管你是先读还是后读,都读取不到内容;因为a代表追加,当你open的时候光标已经移到了最后一位,所以你读不到东西;
二.文件的一些常用操作
1.seek(n)光标移动到n位置,注意,移动的单位是byte.所以如果是utf-8的中文部分要是3的倍数;
通常我们是使用seek都是移动到开头或者结尾.ctrl + f查找你的东西
移动到开头:seek(0)
移动到结尾:seek(0,2)seek的第二个参数表示的是从哪个位置进行偏移,默认是0,表示开头,2代表结尾.
seek讲解:seek(3)的意思,就是先找到3的位置,然后光标移动到那,3个字节代表一个汉字,所以移动到第一个汉字那;
seek的妙用:
f = open("小护士",mode="r+",encoding="utf-8")
f.seek(6)
s = f.read(3)
print(s)
f.seek(0)
ss = f.read(3)
print(ss)
f.flush()
f.close()
#输出结果:
发小金
周润发
**注意:在r+模式下有一个深坑,如果读取了内容,就是不管你前面读了几个,光标显示是多少,后面去写都是在末尾;
如果你不读,直接写,那就会覆盖前面的内容;只有在r+模式下,他不会跟着光标走;
2.文件的内容修改
import os
with open("小护士",mode="r",encoding="utf-8") as f1, \
open("小",mode = "w",encoding="utf-8")as f2:
s = f1.read()
ss = s.replace("周","李")
f2.write(ss)
os.remove("小护士")
os.rename("小","小护士")
#输出结果:
文件中的姓周的:
李润发
李西
李杰伦
李星星
李恩来
李树人
全部变成姓李
在这里我们要知道文件不能直接修改,必须删掉原来的,在重命名新的文件名称;
a:readline()表示读取一行;
所以要想循环读取
with open("小护士",mode="r",encoding="utf-8")as f:
count = 0
for line in f:
if count >= 2:
print(line)
count += 1
#输出结果:这里是从第三行开始读取
李润发 李西 李杰伦 李星星 李恩来 李树人
用for遍历可以;
Python_008(文件操作)的更多相关文章
- 【.NET深呼吸】Zip文件操作(1):创建和读取zip文档
.net的IO操作支持对zip文件的创建.读写和更新.使用起来也比较简单,.net的一向作风,东西都准备好了,至于如何使用,请看着办. 要对zip文件进行操作,主要用到以下三个类: 1.ZipFile ...
- 野路子出身PowerShell 文件操作实用功能
本文出处:http://www.cnblogs.com/wy123/p/6129498.html 因工作需要,处理一批文件,本想写C#来处理的,后来想想这个是PowerShell的天职,索性就网上各种 ...
- Node基础篇(文件操作)
文件操作 相关模块 Node内核提供了很多与文件操作相关的模块,每个模块都提供了一些最基本的操作API,在NPM中也有社区提供的功能包 fs: 基础的文件操作 API path: 提供和路径相关的操作 ...
- 归档NSKeyedArchiver解归档NSKeyedUnarchiver与文件管理类NSFileManager (文件操作)
========================== 文件操作 ========================== 一.归档NSKeyedArchiver 1.第一种方式:存储一种数据. // 归档 ...
- SQL Server附加数据库报错:无法打开物理文件,操作系统错误5
问题描述: 附加数据时,提示无法打开物理文件,操作系统错误5.如下图: 问题原因:可能是文件访问权限方面的问题. 解决方案:找到数据库的mdf和ldf文件,赋予权限即可.如下图: 找到mdf ...
- 通过cmd完成FTP上传文件操作
一直使用 FileZilla 这个工具进行相关的 FTP 操作,而在某一次版本升级之后,发现不太好用了,连接老是掉,再后来完全连接不上去. 改用了一段时间的 Web 版的 FTP 工具,后来那个页面也 ...
- Linux文件操作的主要接口API及相关细节
操作系统API: 1.API是一些函数,这些函数是由linux系统提供支持的,由应用层程序来使用,应用层程序通过调用API来调用操作系统中的各种功能,来干活 文件操作的一般步骤: 1.在linux系统 ...
- C语言的fopen函数(文件操作/读写)
头文件:#include <stdio.h> fopen()是一个常用的函数,用来以指定的方式打开文件,其原型为: FILE * fopen(const char * path, c ...
- Python的文件操作
文件操作,顾名思义,就是对磁盘上已经存在的文件进行各种操作,文本文件就是读和写. 1. 文件的操作流程 (1)打开文件,得到文件句柄并赋值给一个变量 (2)通过句柄对文件进行操作 (3)关闭文件 现有 ...
随机推荐
- 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_07 缓冲流_2_BufferedOutputStream_字节缓冲
子类 继承父类,这些方法都可以使用 必须写上flush,刷新数据数据才能写入到文件内
- python 正则表达式 re.split
内置函数split与re库中的split,有很多相似处 #!use/bin/python #coding:utf-8 import re str= "https://i.cnb1logs.c ...
- 函数参数python
函数中的默认参数,调用的时候可以给参数 赋值,也可以使用默认值 修改add函数如下 add()函数第一个参数没有默认值,第二个函数b默认值是3,在调用函数的时候,只赋予了函数实际参数为2, 也就是说该 ...
- 数论-欧拉函数-LightOJ - 1370
我是知道φ(n)=n-1,n为质数 的,然后给的样例在纸上一算,嗯,好像是找往上最近的质数就行了,而且有些合数的欧拉函数值还会比比它小一点的质数的欧拉函数值要小,所以坚定了往上找最近的质数的决心—— ...
- python基础-5 冒泡排序、递归
上节总结 一.上节内容补充回顾 1.lambda func = lambda x,y: 9+x 参数: x,y 函数体:9+x ==> return 9+x func: 函数名 def func ...
- “希希敬敬对”队软件工程第九次作业-beta冲刺第二次随笔
队名: “希希敬敬对” 龙江腾(队长) 201810775001 杨希 201810812008 何敬上 201810812004 今日讨论会议照片一张: 每个人 ...
- JS 数组的常用方法归纳之不改变原数组和其他
不改变原数组的方法 concat() 连接两个或多个数组,不改变现有数组,返回新数组,添加的是数组中的元素 join(",") 把数组中的所有元素放入一个字符串,通过‘,’分隔符进 ...
- Java-集合第三篇List集合
1.List集合 有序可重复集合,集合中的每个元素都有其对应的顺序索引. 2.List相对于Collection额外提供的方法: 1>void add(int index,Object elem ...
- [BZOJ 2989]数列(二进制分组+主席树)
[BZOJ 2989]数列(二进制分组+主席树) 题面 给定一个长度为n的正整数数列a[i]. 定义2个位置的graze值为两者位置差与数值差的和,即graze(x,y)=|x-y|+|a[x]-a[ ...
- 接口测试工具——postman
Postman 之前是作为Chrome 的一个插件,现在要下载应用才能使用. 以下是postman 的界面: 各个功能区的使用如下: 快捷区: 快捷区提供常用的操作入口,包括运行收藏夹的一组测试数据, ...