1、打开和关闭

要打开文件可以使用函数 open(),它位于自动导入模块 io 中

函数将文件名作为唯一不可缺少的参数,并返回一个文件对象

它还有一个名叫 mode 的参数,用于指定文件模式,其可取值如下:

描述
'r' 读取模式(默认值)
'w' 写入模式,当文件不存在时创建它,当文件存在时清除原有内容
'x' 独占写入模式,当文件不存在时创建它,当文件存在时引发异常
'a' 附加模式,在既有文件末尾继续写入
'b' 二进制模式(与其它模式结合使用)
't' 文本模式(默认值,与其它模式结合使用)
'+' 读写模式(与其它模式结合使用)

要关闭文件可以使用函数 close(),在把数据写入文件后,若没有正确关闭文件,则很可能不能成功地写入数据

为此,Python 提供了一种更加简便的方法,with 语句。当使用 with 语句打开文件时,将自动关闭文件

>>> with open('fileName') as f:
pass

2、读取和写入

首先要明白,在文本模式和二进制模式下,Python 分别将 str 和 bytes 作为文件传输的基本数据类型

(1)按字符或字节读写

如果有一个名为 f 的文件对象,那么我们可以用 f.write() 来写入数据

>>> f = open('testFile.txt','w') # 当没有指定 b 或 t 时,默认为 t
>>> f.write('Hello, ')
# 7
>>> f.write('World')
# 5
>>> # 还没有使用 f.close 关闭文件时,文件中没有写入任何内容
>>> f.close()

读取也同样简单,使用 f.read() 方法即可

在文本模式下需要说明读取多少个字符,在二进制模式下需要说明读取多少个字节

>>> f = open('testFile.txt') # 当不指定模式时,默认为 rt
>>> f.read(2)
# 'He'
>>> f.read() # 不提供参数时,读取余下的全部内容
# 'llo, World'

(2)按行读写

对于按行读取文件,我们可以使用方法 readline()

当不提供任何参数时,读取一行并返回,当提供一个非负整数时,读取指定字符数并返回

如果希望读取文件中所有行,并以列表的方式返回它们,可以使用方法 readlines()

对于写入文件,方法 writelines() 和方法 readlines() 相反,其接收一个字符串列表,并将这些字符串写入文件中

注意,写入时并不会自动添加换行符,因此必须自行添加,另外,不存在方法 `writeline()``

>>> f = open('testFile.txt','w')
>>> f.writelines(['I\n','Love\n','Python\n'])
>>> f.close()
>>> f = open('testFile.txt','r')
>>> f.readline()
# 'I\n'
>>> f.readlines()
# ['Love\n', 'Python\n']

(3)迭代文件对象

① 每次一个字符或字节

with open(fileName) as f:
while True:
char = f.read(1)
if not char: break
process(char)

② 每次一行

with open(fileName) as f:
while True:
line = f.readline()
if not line: break
process(line)

③ 文件迭代器

with open(fileName) as f:
for line in f:
process(line)

3、随机存储

在之前的做法中,我们将文件视为流,只能按顺序从头到尾读取

实际上,读写可以在任意位置进行,这称为随机存储。为此,可以使用文件对象的两个方法:seektell

方法 seek(offest[, whence]) 将当前位置移到 offest 和 whence 指定的位置

参数 offest 指定偏移字符或字节数,参数 whence 指定偏移的初始位置,它的取值有三个:

默认为文件开头 io.SEEK_SET(0),可以是当前位置 io.SEEK_CUR(1),可以是文件末尾 io.SEEK_END(2)

方法 tell() 返回文件当前位置

>>> f = open('testFile.txt','w')
>>> f.write('01234567890123456789')
# 20
>>> f.seek(5)
# 5
>>> f.write('Hello World')
# 11
>>> f.close()
>>> f = open('testFile.txt','r')
>>> f.read()
# '01234Hello World6789'
>>> f.close()

【 阅读更多 Python 系列文章,请看 Python学习笔记

Python学习笔记之文件处理的更多相关文章

  1. [Python学习笔记]组织文件

    shutil 模块 shutil 模块可以让我们很方便的在Python程序中复制.移动.改名和删除文件. 复制文件和文件夹 使用shutil.copy()来复制文件,该函数含两个参数,均为字符串格式的 ...

  2. Python学习笔记015——文件file的常规操作之一(文本文件)

    1 什么是文件 文件是用于数据存储的单位 文件通常用来长期保存数据 读写文件是最常见的I/O操作.Python内置了读写文件的函数,用法和C是兼容的. 读写文件的功能都是由操作系统提供的,一般而言,操 ...

  3. python学习笔记(11):文件的访问与函数式编程

    一.文本文件读写的三种方法 1.直接读入 file1 = open('E:/hello/hello.txt') file2 = open('output.txt','w') #w是可写的文件 whil ...

  4. python学习笔记(7)文件的访问与函数式编程

    一.文件读写的3中方法 1.直接读入 fiel1=open('test.txt') file2=open('output.txt') while True: line=file1.readLine() ...

  5. python学习笔记(六)---文件操作与异常处理机制

    文件读取 读取整个文件 要读取文件,需要一个包含几行文本的文件.下面首先来创建一个文件,它包含精确到小数点后30位的圆周率值,且在小数点后每10位处都换行: pi_digits.txt 3.14159 ...

  6. 转载-Python学习笔记之文件读写

    Python 文件读写 Python内置了读写文件的函数,用法和C是兼容的.本节介绍内容大致有:文件的打开/关闭.文件对象.文件的读写等. 本章节仅示例介绍 TXT 类型文档的读写,也就是最基础的文件 ...

  7. python学习笔记之文件操作(三)

    这篇博客小波主要介绍一下python对文件的操作 对文件的操作主要分为三步: 1.打开文件获取文件的句柄,句柄也是文件描述符 2.通过文件句柄操作文件 3.关闭文件. 现有以下文件,是小波随写的周杰伦 ...

  8. python学习笔记4(文件操作)

    文件操作: 1.f=open(”caidan”,”w”,encoding=”utf8”)      直接打开一个文件,如果文件不存在则创建文件 f.close() 2.with open (”caid ...

  9. 转载-python学习笔记之文件I/O

    Python 文件I/O 本章只讲述所有基本的的I/O函数,更多函数请参考Python标准文档. 打印到屏幕 最简单的输出方法是用print语句,你可以给它传递零个或多个用逗号隔开的表达式.此函数把你 ...

随机推荐

  1. crmjs区分窗口是否是高速编辑(2)

    随着crm的版本号不同,有些功能不能使用,这里提供了第二种写法: function loadFrom() {     var formType = Xrm.Page.ui.getFormType(); ...

  2. Codeforces Round #276 (Div. 1) A. Bits 贪心

    A. Bits   Let's denote as  the number of bits set ('1' bits) in the binary representation of the non ...

  3. 2498 IncDec Sequence

    2498 IncDec Sequence  时间限制: 1 s  空间限制: 64000 KB  题目等级 : 钻石 Diamond 题解  查看运行结果     题目描述 Description 给 ...

  4. luogu4218 [JSOI2008] 最小生成树计数

    题目大意 求一个加权无向图的最小生成树的个数.1<=n<=100; 1<=m<=1000,具有相同权值的边不会超过10条. 题解 命题1 由构成最小生成树的边的边权从小到大排序 ...

  5. mongodb 3.2配置内存缓存大小为MB/MongoDB 3.x内存限制配置

    mongodb 3.2配置内存缓存大小为MB/MongoDB 3.x内存限制配置 转载自勤奋的小青蛙 mongodb占用内存非常高,这是因为官方为了提升存储的效率,设计就这么设计的. 但是大部分的个人 ...

  6. Spring Boot 特性 —— SpringApplication

    转自:https://blog.csdn.net/cqdz_dj/article/details/52910317

  7. Spark深入之RDD

    目录 Part III. Low-Level APIs Resilient Distributed Datasets (RDDs) 1.介绍 2.RDD代码 3.KV RDD 4.RDD Join A ...

  8. hdu1429胜利大逃亡(bfs)

    胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Su ...

  9. Vue开发入门看这篇文章就够了

    摘要: 很多值得了解的细节. 原文:Vue开发看这篇文章就够了 作者:Random Fundebug经授权转载,版权归原作者所有. 介绍 Vue 中文网 Vue github Vue.js 是一套构建 ...

  10. Halcon学习笔记之支持向量机(一)

    例程:class_overlap_svm.hdev 说明:这个例程展示了如何用一个支持向量机来给一幅二维的图像进行分类.使用二维数据的原因是因为它可以很容易地联想成为区域和图像.本例程中使用了三个互相 ...