为了方便演示,我们建立了一个示范文本,如下所示:

hello,我是代码螺丝钉
test1
test2
test3

文件的读


f = open("示范文本","r")   #打开文件,获取句柄
v1 = f.read() #通过句柄进行读操作
print(v1) #打印结果为nicodeDecodeError: 'gbk' codec can't decode byte,报错了
f.close() #关闭文件

以上程序报错了,原因是因为示范文本这个文件的编码格式是utf-8,而open这个函数解码默认为系统的解码,我们操作系统默认为GBK编码,以下进行解决

f = open("示范文本","r",encoding="utf-8")   #打开文件,获取句柄,设置以utf-8解码
v1 = f.read() #通过句柄进行读操作
print(v1)
#打印结果为
# hello,我是代码螺丝钉
# test1
# test2
# test3
f.close() #关闭文件

如上所示,加入encoding=“utf-8”后可以解决解码错误的问题,如果我们想要读取一行如何做呢,答案是使用readline()

f = open("示范文本","r",encoding="utf-8")   #打开文件,获取句柄,设置以utf-8解码
print(f.readline(),end="") #读取一行,end =""代表忽略回车,要不然打印会多打印一行空行
print(f.readline(),end="")
print(f.readline(),end="")
print(f.readline(),end="")
print(f.readline(),end="")
f.close() #关闭文件
#打印结果为
# hello,我是代码螺丝钉
# test1
# test2
# test3

还有一个函数为readlines(),下面来演示其效果

f = open("示范文本","r",encoding="utf-8")   #打开文件,获取句柄,设置以utf-8解码
print(f.readlines()) #读取结果,最后存入一个列表中,每个元素代表一行
f.close() #关闭文件
#打印结果为['hello,我是代码螺丝钉\n', 'test1\n', 'test2\n', 'test3']

以上发现上面代码的效果就是读取所有行,然后建立一个列表,每一行的内容作为列表的一个元素

文件的写


文件的写可以完全类比文件的读,以下是示例代码

f = open("示范文本","w",encoding="utf-8")   #打开文件,获取句柄,设置以utf-8解码
f.writelines(["","2222\n,3333\n"]) #传入列表,一次写多行
f.write("4444\n5555\n")
f.close()

最后写出来的文本如下所示

11112222
,3333
4444
5555

文件的其他模式


  • a   追加模式,不会覆盖文件,而是写到文件最后
  • r+   可读写模式,写操作默认从文件开头开始写

如何不用自己手动close,而让操作系统自己帮我们取关闭文件呢,答案是使用with关键字

with open("示范文本","w",encoding="utf-8") as f:
f.write("4444\n5555\n")

文件的seek操作


我们在windows中进行文本编辑时候,有一个光标|一直闪烁,用于定位当前的文本编辑位置,对应文件操作就是seek,以下为seek函数的用法

with open("示范文本","rb") as f:   #要使用seek的其他选项,必须要用二进制打开
f.seek(2) #从开头算起绝对位置的2
print(f.tell())
# 打印结果为2
f.seek(3,1) #相对于当前位置2 偏移3
# 打印结果为5
print(f.tell())
f.seek(-1,2) #从结尾12 算起后退1
print(f.tell())
# 打印结果为11

文件的flush操作、truncated操作


对于这两个操作,这里就不贴代码了,但是需要对其进行一下讲解

flush操作的目的:平常我们使用write函数进行写,实际上是在内存中写,并没有真正写入到硬盘中,当我们关闭文件的时候才会真正写入,但是如果我们写到一半的时候就想把内存中的内容存入硬盘,就可以调用flush函数

truncated操作本质上是写,打开一个文件,然后使用truncated函数对其进行切片操作

文件操作(open\read\write\close)的更多相关文章

  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)关闭文件 现有 ...

  10. python 文件操作(转)

    python中对文件.文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块. 得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd() 返回指定目录下的所有文件和目 ...

随机推荐

  1. 论文泛读·Adversarial Learning for Neural Dialogue Generation

    原文翻译 导读 这篇文章的主要工作在于应用了对抗训练(adversarial training)的思路来解决开放式对话生成(open-domain dialogue generation)这样一个无监 ...

  2. H5 仿ios select滚动选择器。框架。

    官网上描述的很详细,并且开源,轻量. 有兴趣的可以去尝试官网上的demo写的也很好,并且每个参数也解释的很详细. http://zhoushengfe.com/iosselect/website/in ...

  3. Centos:如何查找安装的jdk的目录

    使用$JAVA_HOME的话能定位JDK的安装路径的前提是配置了环境变量$JAVA_HOME,否则如下所示,根本定位不到JDK的安装路径. 正确的方式是通过 which java: [tt@vddd ...

  4. 关于ECMAScript 2016, 2017, 和2018中新增功能(摘抄)

    ECMAScript 2016 1. Array.prototype.includes includes是数组上的简单实例方法,并有助于轻松查找某个项是否在Array中(包括NaN不像indexOf) ...

  5. 列表(list)之一定义 添加 删除 排序 反转 索引等其他操作

    1.定义: 创建一个列表,只要把逗号分隔的不同的数据项使用方括号括起来即可,序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推. # 列表list1=[&q ...

  6. Canvas - 时钟绘制

    导语:距离上一次写canvas,已经过去两年半,如今业务需要,再次拾起,随手记录. [思考] 时钟的绘制主要在于圆的绘制:1. 使用context.arc()方法直接绘制圆或圆弧: 2. 使用圆的方程 ...

  7. python-文件操作和集合

    1.打开文件 如果文件不存在会报错 f = open('information.txt','r+') 2.读取文件 read 读取文件 readline 读取文件的一行内容 readlines 读取文 ...

  8. 推荐一个c++小巧开源且跨平台的图像解码库

    该图像解码库仅仅三个文件. 图像处理封装: spot.cpp spot.h 解码库实现: spot.c 支持图片文件格式如下: File format Read Write BMP files yes ...

  9. [NOI2016]循环之美

    Description 牛牛是一个热爱算法设计的高中生.在他设计的算法中,常常会使用带小数的数进行计算.牛牛认为,如果在 k  进制下,一个数的小数部分是纯循环的,那么它就是美的.现在,牛牛想知道:对 ...

  10. VK Cup 2017 - Round 2

    FallDream打的AB都FFT了,只剩一个我打的C,没进前一百,之后看看马拉松复活赛有没机会呗. A. Voltage Keepsake 题目大意:n个东西,每个东西一开始有bi能源,每秒消耗ai ...