一.文件操作

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(文件操作)的更多相关文章

  1. 【.NET深呼吸】Zip文件操作(1):创建和读取zip文档

    .net的IO操作支持对zip文件的创建.读写和更新.使用起来也比较简单,.net的一向作风,东西都准备好了,至于如何使用,请看着办. 要对zip文件进行操作,主要用到以下三个类: 1.ZipFile ...

  2. 野路子出身PowerShell 文件操作实用功能

    本文出处:http://www.cnblogs.com/wy123/p/6129498.html 因工作需要,处理一批文件,本想写C#来处理的,后来想想这个是PowerShell的天职,索性就网上各种 ...

  3. Node基础篇(文件操作)

    文件操作 相关模块 Node内核提供了很多与文件操作相关的模块,每个模块都提供了一些最基本的操作API,在NPM中也有社区提供的功能包 fs: 基础的文件操作 API path: 提供和路径相关的操作 ...

  4. 归档NSKeyedArchiver解归档NSKeyedUnarchiver与文件管理类NSFileManager (文件操作)

    ========================== 文件操作 ========================== 一.归档NSKeyedArchiver 1.第一种方式:存储一种数据. // 归档 ...

  5. SQL Server附加数据库报错:无法打开物理文件,操作系统错误5

    问题描述:      附加数据时,提示无法打开物理文件,操作系统错误5.如下图: 问题原因:可能是文件访问权限方面的问题. 解决方案:找到数据库的mdf和ldf文件,赋予权限即可.如下图: 找到mdf ...

  6. 通过cmd完成FTP上传文件操作

    一直使用 FileZilla 这个工具进行相关的 FTP 操作,而在某一次版本升级之后,发现不太好用了,连接老是掉,再后来完全连接不上去. 改用了一段时间的 Web 版的 FTP 工具,后来那个页面也 ...

  7. Linux文件操作的主要接口API及相关细节

    操作系统API: 1.API是一些函数,这些函数是由linux系统提供支持的,由应用层程序来使用,应用层程序通过调用API来调用操作系统中的各种功能,来干活 文件操作的一般步骤: 1.在linux系统 ...

  8. C语言的fopen函数(文件操作/读写)

    头文件:#include <stdio.h> fopen()是一个常用的函数,用来以指定的方式打开文件,其原型为:    FILE * fopen(const char * path, c ...

  9. Python的文件操作

    文件操作,顾名思义,就是对磁盘上已经存在的文件进行各种操作,文本文件就是读和写. 1. 文件的操作流程 (1)打开文件,得到文件句柄并赋值给一个变量 (2)通过句柄对文件进行操作 (3)关闭文件 现有 ...

随机推荐

  1. 阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第2节 Stream流式思想概述_3_流式思想概述

  2. 类LinkedHashSet

    /* * LinkedHashSet底层数据结构由哈希表和链表组成 * 哈希表保证元素的唯一性 * 链表保证元素有序(存储和取出是一致的) * */ import java.util.LinkedHa ...

  3. 20190925 On Java8 第二十二章 枚举

    第二十二章 枚举 基本 enum 特性 创建 enum 时,编译器会为你生成一个相关的类,这个类继承自 Java.lang.Enum. valueOf() 是在 Enum 中定义的 static 方法 ...

  4. springboot启动时报错 错误: 找不到或无法加载主类 com.xxx.xxx.Application

    1. Q1 错误: 找不到或无法加载主类 com.xxx.xxx.Application 解决办法:啥也不动,maven clean下,重启 1. Q2 layui控制下拉框高度 解决 .layui- ...

  5. MySQL练习与小结

    当你专注一件事的时候,时间总是过得很快! foreign key 练习 -- 切换数据库 use stumgr -- 删除班级表 drop table t_class1 -- 创建一个班级表 crea ...

  6. 解决浏览器打开网页后提示“dns_probe_possible”的方法

    使用浏览器浏览网页时偶尔会遇到无法上网且浏览器提示:DNS_PROBE_POSSIBLE 一般有三种情况会导致这样的故障: 1.网络协议出现故障,也就是常说的 DNS 设置问题 2.浏览器中设置问题, ...

  7. Java枚举enum关键字

    枚举的理解 枚举其实就是一个类,枚举类的实例是一组限定的对象 传统的方式创建枚举 [了解] 对比:单例类 1.构造器私有化 2.本类内部创建对象 3.通过public static方法,对外暴露该对象 ...

  8. A*(A_star)搜索总结

    \(A^*(A star)\)搜索总结 标签:算法--搜索 阅读体验:https://zybuluo.com/Junlier/note/1299772 定义 先复制一则定义 \(A^*\)算法在人工智 ...

  9. python的cls,self,classmethod,staticmethod

    python类里会出现这三个单词,self和cls都可以用别的单词代替,类的方法有三种, 一是通过def定义的 普通的一般的,需要至少传递一个参数,一般用self,这样的方法必须通过一个类的实例去访问 ...

  10. 关于html5 video的连续播放

    <!doctype html> <html lang="en"> <head> <meta charset="utf-8&quo ...