pythoning——9:python文件操作

字面意思,文件操作,无非就是找到文件,打开文件,写入/删除文件,找不到文件就去创建文件,并没有什么特殊的。如果你是这么认为的,那就太天真了,在python中提供了更为合理的数据管理方式。并非是你想像中的那么简单。

首先是打开文件,打开文件需要调用open函数,提供文件名,及打开方式。打开方式有(默认为r):

r:     只读模式
w:     只写模式
a:     追加模式(从文件结尾追加)
r+:    读写模式
w+:   读写模式(会先清空,后写入,然后读取,写读更合理吧)
a+:    读写模式(还是只会从结尾处追加)
rb:    二进制只读模式
wb:    二进制只写模式
ab:    二进制追加模式
rb+:   二进制读写模式
wb+:   二进制读写模式
ab+:   二进制读写模式

读取文件

通过读模式打开文件后,可以对文件中的内容进行读取操作。

以test.txt文本为例,内容如下:

1 fukuda
2 jingyuz
3 music
4 doit

test.txt

下面介绍几种常用的文件读取方式

首先是读取文件中的所有内容read()

>>> f = open(‘test.txt‘)
>>> a = f.read()
>>> print(a)
1 fukuda
2 jingyuz
3 music
4 doit
>>> type(a)
<class ‘str‘>
>>> a
‘1 fukuda\n2 jingyuz\n3 music\n4 doit‘
>>> f.close()

这种读取方式,将文件中的所有的数据都会加载到内存中,文件小还好说,文件大的话就惨了,有可能会造成死机的说,别问我为什么会知道。而且这个函数会将所有的文本内容全部赋给一个字符串变量,对,想像一个场景,一个容量为几十个G的字符串。

刚接触python的时候学习的第一个读取函数是readlines(),同样会读取文件中所有的内容,但是会按行划分为列表。

>>> f = open(‘test.txt‘,‘r‘)
>>> a = f.readlines()
>>> type(a)
<class ‘list‘>
>>> print (a)
[‘1 fukuda\n‘, ‘2 jingyuz\n‘, ‘3 music\n‘, ‘4 doit‘]
>>> f.close()

但是通过这种方式同样会面临读取大文件内存不足的问题,python提供了readline()函数,可以逐行阅读。

>>> f = open(‘test.txt‘,‘r‘)
>>> a = f.readline()
>>> while a:
...     print (a,end="")
...     a = f.readline()
...
1 fukuda
2 jingyuz
3 music
4 doit>>>f.close()

是的,感觉操作特别复杂,而且效率并不会特别高。据官方介绍,自python2.5版本以后,文本流采用了可迭代的方式,即你可以用for循环的方式遍历文本流,而不用担心内存不足什么的。

>>> f = open(‘test.txt‘,‘r‘)
>>> for line in f:
...     print(line,end="")
...
1 fukuda
2 jingyuz
3 music
4 doit

有时通过以上的读取方式可能会出现乱码什么的,这是由于文件编码方式不同的原因。可以通过二进制方式打开文件(open(‘test.txt‘,‘rb‘))或者直接在打开文件是规定enconding为哪种编码方式(open(‘test.txt‘,‘r‘,encoding=‘utf-8‘))。

写文件

可以通过写模式进行写文件操作,这里需要注意几点,w会先清空原有的文本文件,然后再在上面写操作,a只会在原有文件上面进行追加操作,r+则会在指定位置处覆盖内容的写方式。写的操作通常都是调用date.write(str)的方式写入文件流。下面以r+操作test.txt文件为例

第一行
第二行
第三行
第四行

test.txt

>>> f = open(‘test.txt‘,‘r+‘)
>>> f.readline()
>>> b = f.tell()
>>> f.seek(b)
8
>>> f.write("第五行\n")
4
>>> f.close()

而此时test.txt文件则变为:

第一行
第五行
第三行
第四行

test.txt

这里简单介绍了文件的写操作,上面用到了两个陌生函数tell和seek,这两个函数在不能用鼠标来定位自己想到达的位置的python代码里,是很重要的操作文本文件的函数。

首先tell用来获取当前读操作的位置,返回值为当前位置的长度(字节码)什么的,seek则是定位想要去的位置,然后到那里去,进行读写操作,二者结合使用。

另外python还为文件操作提供一些其他的功能:

f.flush() 将缓存区的内容写入硬盘

f.next()返回下一行,并将文件操作标记位移到下一行。把一个file用于for ... in file这样的语句时,就是调用next()函数来实现遍历的。

f.seekable()查看节点是否可以被定位。

f.writable()查看文件是否可写

f.truncate()截断指针位置之后的数据,与seek结合使用

时间: 2024-10-01 06:38:44

pythoning——9:python文件操作的相关文章

Python文件操作及seek偏移详解

本文和大家分享的主要是python中文件操作及seek偏移相关内容,一起来看看吧,希望对大家学习python有所帮助. 一.Python文件操作中的编码 本次测试是基于Python 2.7.12  OS:Ubuntu 16.04  pycharm环境,以及Win7下2.7.12; 首先说下汉字在文件中占用的字节数,这个先看以下实验(Win7)下 因为Linux下不支持gbk,本文不讲utf-8 ,gbk编码具体知识.本次实验只讲解python在使用utf-8和gbk编码时,对汉字占用的字节有所不

python 文件操作seek() 和 telll() 自我解释

python 文件操作seek() 和 telll()  自我解释 file.seek()方法格式: seek(offset,whence=0)   移动文件读取指针到制定位置 offset:开始的偏移量,也就是代表需要移动偏移的字节数. whence: 给offset参数一个定义,表示要从哪个位置开始偏移:0代表从文件开头算起,1代表开始从当前位置开始算起,2代表从文件末尾开始算起.当有换行时,会被换行截断.                        seek()无返回值,故值为None

关于python 文件操作os.fdopen(), os.close(), tempfile.mkstemp()

嗯.最近在弄的东西也跟这个有关系,由于c基础渣渣.现在基本上都忘记得差不多的情况下,是需要花点功夫才能弄明白. 每个语言都有相关的文件操作. 今天在flask 的例子里看到这样一句话.拉开了文件操作折腾的序幕 db_fd, flaskr.app.config['DATABASE'] = tempfile.mkstemp() 稍微查询一下就能了解到 tempfile是一个临时文件模块. 包含了一些临时文件的操作 tempfile.mkstemp() 在很老很老的python版本的时候,第一个参数是

Python基础篇【第2篇】: Python文件操作

Python文件操作 在Python中一个文件,就是一个操作对象,通过不同属性即可对文件进行各种操作.Python中提供了许多的内置函数和方法能够对文件进行基本操作. Python对文件的操作概括来说:1. 打开文件 2.操作文件 3.关闭文件 1. 打开文件.关闭文件 Python中使用open函数打开一个文件,创建一个file操作对象. open()方法 语法: file object = open(file_name [, access_mode][, buffering]) 各个参数的细

Python文件操作与函数目录

文件操作 python文件操作 函数 Python函数学习——初步认识 Python函数学习——作用域与嵌套函数 Python函数学习——匿名函数 python内置函数 Python函数学习——递归 Python函数——命名空间与闭包 Python函数——闭包延迟绑定 Python函数——装饰器 Python函数-列表推导式.生成器与迭代器 练习题 Python文件与函数练习题 案例 python函数练习——个人信息修改 Python函数案例——员工信息管理 原文地址:https://www.c

第六章、Python文件操作

第六章.Python文件操作 Python可以对文件进行查看.创建等功能,可以对文件内容进行添加.修改.删除,且所使用到的函数在Python3.5.x为open,在Python2.7.x同时支持file和open,但是在3.5.x系列移除了file函数. 一.Python文件打开方式 文件句柄 = open('文件路径','打开模式') Nginx_Conf = open('nginx.conf','r',encoding='utf-8') Ps:文件句柄相当于于变量名,文件路径可以写为绝对路径

Lesson 024 —— python 文件操作

Lesson 024 -- python 文件操作 open() 方法 Python open() 方法用于打开一个文件,并返回文件对象,在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出 OSError. 注意:使用 open() 方法一定要保证关闭文件对象,即调用 close() 方法. open() 函数常用形式是接收两个参数:文件名(file)和模式(mode). open(file, mode='r') 完整的语法格式为: open(file, mode='r',

3 Python文件操作

Python文件操作 open 以什么编码方式存储文件,就以什么编码方式打开 f = open('d:\模特主妇护士班主任.txt',encoding='utf-8') # 绝对路径打开 f.close() f = open('模特主妇护士班主任',encoding='utf-8') # 相对路径打开 f.close() with open('log',encoding='utf-8') as f: # 此方法常用 不用进行close 读 read # r 以str的方式读出 f = open(

Python 文件操作Error: binary mode doesn&#39;t take an encoding argument

Python 报错:ValueError: binary mode doesn't take an encoding argument 在运行文件操作相关功能时报错:ValueError: binary mode doesn't take an encoding argument 上代码: >>> with open("course_info","rb+",encoding="utf-8")as f: #rb+操作时不支持指定e

Python文件操作:文件的打开关闭读取写入

Python文件操作:文件的打开关闭读取写入 一.文件的打开关闭 Python能以文本和二进制两种方式处理文件,本文主要讨论在Python3中文本文件的操作. 文件操作都分为以下几个步骤: 1.打开文件. 2.操作文件:读/写. 3.关闭文件. 操作系统中的文件默认处于存储状态,读写文件时需要请求操作系统打开一个要在当前程序操作的对象,打开不存在的文件可以创建文件.open()方法通过接收"文件路径"以及“文件打开模式”等参数来打开一个文件,并且返回文件对象.打开后的文件只能在当前程序