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. 试试pypy

    pypy是一个python的解释器和JIT编译器.能够在不改动不论什么代码的情况下大幅提升python代码的性能. 使用超级简单,在官网下载编译好的二进制包进行安装,然后然后执行代码的时候指定这个解释 ...

  2. MySQL 相邻两条数据相减

    <!-- 计算每两次消费的间隔天数 --> SELECT B.MEN_ID,TIMESTAMPDIFF(DAY,B.PRE_DATE,B.CURR_DATE) AS DAYS FROM ( ...

  3. Extjs4,form提交时emptyText传值问题

    在Extjs4中,form提交时,文本框的emptyText会传到后台,比如 上图中的“请选择”这样的文本会作为值传到后台. 解决方法: form提交时配置  submitEmptyText: fal ...

  4. Codeforces Round #330 (Div. 2) D. Max and Bike 二分

    D. Max and Bike For months Maxim has been coming to work on his favorite bicycle. And quite recently ...

  5. Android View的onTouch和onClick和onLongClick事件

    这三个事件的调用顺序是: onTouch->onLongClick->onClick 先看这三个事件的处理函数: public boolean onTouch(View v, Motion ...

  6. Android中Calendar类的用法总结

    Calendar是Android开发中需要获取时间时必不可少的一个工具类,通过这个类可以获得的时间信息还是很丰富的,下面做一个总结,以后使用的时候就不用总是去翻书或者查资料了. 在获取时间之前要先获得 ...

  7. Codeforces--630H--Benches(组合数)

    H - Benches Crawling in process... Crawling failed Time Limit:500MS     Memory Limit:65536KB     64b ...

  8. [BZOJ 1718] Redundant Paths

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1718 [算法] 用Tarjan算法找出所有e-DCC(边-双联通分量),然后将这张图 ...

  9. bzoj 3231 [ Sdoi 2008 ] 递归数列 —— 矩阵乘法

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3231 裸矩阵乘法. 代码如下: #include<iostream> #incl ...

  10. bzoj 3209 花神的数论题 —— 数位DP

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3209 算是挺简单的数位DP吧,但还是花了好久才弄明白... 又参考了博客:https://b ...