一.文件操作

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语言高级_03-常用API第二部分_第6节 基本类型包装类_1_包装类的概念

    只有这两个比较特殊

  2. 阶段1 语言基础+高级_1-3-Java语言高级_04-集合_07 Collections工具类_3_Collections集合工具类的方法

    第二个参数传递了一个匿名内部类.结果就出现了下面的代码 源码里面有Compare方法,对比两个参数 要重写比较的方法 对对象进行排序 创建学生类.对学生类进行排序 重写Person的ToString方 ...

  3. spring中@Autowired与 @Resource区别

    @Autowired 与@Resource的区别: 1. @Autowired与@Resource都可以用来装配bean. 都可以写在字段上,或写在setter方法上. 2. @Autowired默认 ...

  4. C++食物链【NOI2001】 并查集+建虚点

    B. 食物链[NOI2001] 内存限制:256 MiB 时间限制:1000 ms 标准输入输出 题目类型:传统 评测方式:文本比较 题目描述 动物王国中有三类动物A,B,C,这三类动物的食物链构成了 ...

  5. MySQL基础和习题强化(完结)

    Mysql 1.     Mysql基础知识 1.1.     Index and table searching of Mysql 1.1.1.     Basic concepts of Mysq ...

  6. dp(传球)

    https://ac.nowcoder.com/acm/contest/1126/B 链接:https://ac.nowcoder.com/acm/contest/1126/B来源:牛客网 上体育课的 ...

  7. python 搜索路径顺序查找

    但我们通过 import 或者frome .. import...查找模块的时候,当你导入一个模块,Python 解析器对模块位置的搜索顺序是 1.当前目录 2, 如果不在当前目录,Python 则搜 ...

  8. SpringBoot 集成MyBatis 中的@MapperScan注解

    SpringBoot 集成MyBatis 中的@MapperScan注解 2018年08月17日 11:41:02 文火慢炖 阅读数:398更多 个人分类: 环境搭建 在SpringBoot中集成My ...

  9. 搜索(DFS)---查找最大连通面积

    查找最大的连通面积 695. Max Area of Island (Medium) [[0,0,1,0,0,0,0,1,0,0,0,0,0], [0,0,0,0,0,0,0,1,1,1,0,0,0] ...

  10. Linq 高级应用实例

    using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Tex ...