一.文件操作

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. Tensorflow | 基本函数介绍 简单详细的教程。 有用, 很棒

     http://blog.csdn.net/xxzhangx/article/details/54606040 Tensorflow | 基本函数介绍 2017-01-18 23:04 1404人阅读 ...

  2. Python解决ModuleNotFoundError: No module named 'Queue'的问题

    我们知道Python2和Python3两个版本之间,有些不兼容的地方,Python3中引入Queue会报出这个问题. Python3中要这样引入: import queue Python2中要这样引入 ...

  3. 编程字体Source Code Pro 免费下载

    对于程序员来说,好的字体应该满足的基本条件: 字母和数字易于分辨,如: 英文字母o 和 阿拉伯数字 0 ,或者 英文字母 l 和 阿拉伯数字 1 ,两个单引号 '' 和双引号 ”. 字体等宽,保持对齐 ...

  4. The bean 'dataSource', defined in BeanDefinition defined in class path resou

    SpringCloud对应SpringBoot不匹配 Greenwich 2.1.x Finchley 2.0.x Edgware 1.5.x Dalston 1.5.x SpringBoot Spr ...

  5. Spring框架中AOP特性

    1.AOP介绍 即:面向切面编程,在不改变原有方法的定义与使用.也不改变原程序流程的情况下,可以改变原有方法的功能{增加一些附加的功能,在指定的地方添加其他函数方法:} 2.其他的方法:[需要的四个接 ...

  6. 利用Redisson实现分布式锁及其底层原理解析

    Redis介绍 参考地址:https://blog.csdn.net/turbo_zone/article/details/83422215 redis是一个key-value存储系统.和Memcac ...

  7. Linux 修改hostname几种方式

    1:  hostname DB-Server          --运行后立即生效(新会话生效),但是在系统重启后会丢失所做的修改 2:  echo DB-Server  > /proc/sys ...

  8. django学习笔记(二)

    上节内容回顾: 1.Django请求生命周期 -> URL对应关系(匹配) -> 视图函数 -> 返回用户字符串 -> URL对应关系(匹配) -> 视图函数 -> ...

  9. openSSH学习笔记(一)

    OpenSSH 是 SSH (Secure SHell) 协议的免费开源实现.SSH协议族可以用来进行远程控制, 或在计算机之间传送文件.而实现此功能的传统方式,如telnet(终端仿真协议). rc ...

  10. Azkaban 2.5.0的详细安装过程

    准备下载Azkaban2.5.0:https://azkaban.github.io/downloads.htm 准备插件: 一.MySQL安装与配置 启动数据库并查看状态:sudo service ...