python教程(八)·文件操作
由于离高考越来越近,博主打算本篇文章过后,暂停本系列教程的更新,等到高考完后再继续本系列教程,请谅解!
这次我们学习用python操作文件,包括文件的读、写等……
操作文件第一步——打开文件
要想操作文件,我们首先应该打开一个文件。当然,这个“打开”不是用鼠标双击那种“打开”,别忘了这是个python编程的教程,所以我们是用python程序来打开文件。打开文件用open函数,函数的基本用法如下:
obj = open(name[, mode]) # 中括号包围表示mode参数是默认参数的,即有默认值
上面的name就是我们要打开的文件的路径,这个参数是必须的。参数mode是打开文件的模式,后面单独介绍。
该函数返回一个文件对象,通过这个对象的一些方法,我们对文件进行一些操作。
文件模式
参数mode代表打开文件的模式,文件模式的常用取值有以下几种:
| 值 | 含义 |
|---|---|
'r' |
读模式 (默认值) |
w |
写模式 |
a |
追加模式 |
b |
二进制模式(和其它模式一起使用,如'rb','wb'等) |
+ |
读/写模式(和其它模式一起使用,如'r+'、'w+'、a+等) |
在这里需要进一步解释说明:
- 以读模式打开文件,可以对文件进行读取内容,这要求文件必须存在,若不存在程序将报错中止。
- 以写模式打开文件,可以往文件写入数据,需要注意的是,如果文件不存在将创建文件,如果文件存在会将文件内容清空
- 读/写模式意思是即可读文件又可写文件,如
'r+',以读模式打开文件,除了可以读取文件内容,还可以写入数据 - 以追加模式打开文件不会将文件清空,可以以文件末尾为起点往文件写入数据,相当于特殊的读模式
何为二进制模式?
二进制模式有些特殊,这里单独说明。
文本中的一些控制字符如换行符,在不同的系统中的存储形式是不同的,在Linux系统中存储的是\n一个字符,而在Windows系统中存储的是\r\n两个字符。
为了通用性,python默认用文本模式打开一个文件,从文件中读取到的换行符,python会自动将其转换成一个\n字符;写入数据的时候,python自动将\n转换成对应系统的换行符形式后再写入文件。
也就是说,以文本模式打开的文件,读取的内容不一定是原本的内容!
如果需要操作文件的原始数据,就需要用到二进制模式打开文件了。
不过这个模式我们暂时用不上,用到了再来补充吧。
好了,现在我们以写模式打开一个文件,名为test.txt,这个文件不存在,python自动为我们创建,代码如下:
fobj = open('test.txt', 'w')
第一步完成!
操作文件第二步——读和写
写文件
由于我们刚才以写模式打开了一个test.txt文件,文件无内容,我们先来说说如何往文件写入数据。
往文件写入数据用到文件对象的一个write方法:
fobj = open('test.txt', 'w')
fobj.write('hello world!\n') # 写入内容
fobj.write('I am Lee\n') # 写入内容
该方法还返回一个整数,表示写入的字符数
读文件
如果以读模式打开了一个文件(这个文件要存在),那么我们可以使用文件对象的read方法来读取文件内容:
fobj = open('test.txt', 'r') # 或者fobj = open('test.txt')
content = fobj.read(10) # 读取10个字符
print(content)
content = fobj.read() # 读取剩下的所有字符
print(content)
read方法带参数时,表示读取的字符数(如果是二进制模式就是字节数),不带参数时表示读取剩下全部内容,如果文件比较小的时候可以直接读取全部内容,如果文件比较大不建议这么做,一是因为速度慢,二是因为文件内容过大,没有足够的内存可以一次性容纳这么多数据。
注意:对文件的读和写操作时,文件对象有一个指针用于指定当前文件的操作位置,读文件的时候,会使这个指针往后移动。也就是说,我们读取文件内容时是按顺序读取的,读取完后就没有了,因为指针已经移动到文件末尾。不过我们可以使用文件对象的seek方法,手动改变这个指针的位置;写文件的操作也是类似,除非使用seek方法,否则我们无法将这次写入的数据写入到上一次写入的数据之前。
操作文件最后一步——关闭文件
操作完文件后要对其关闭,特别是更改了文件的数据的时候,可能造成写入的数据没有真正写入到文件中,这是因为写入数据的时候,是往缓冲区写入的,等缓冲区满了,或者关闭文件的时候才会将数据写入硬盘。
操作很简单,调用close方法即可:
fobj.close()
一般情况下,程序退出后或者退出前,程序打开的文件会被自动关闭,但是如果程序因为错误中止了,很可能会出现数据没有被写入文件的现象,为了安全起见,使用完文件后应及时关闭。
通常使用如下代码来保证文件正常关闭:
f = open('test.txt', 'w')
try:
# do something
finally:
f.close()
暂时不用理解try、finally代码块的具体作用,我们只需要知道当try代码块发生错误是程序中止,或者程序正常运行下去,finally代码块都会执行。
也可以使用如下代码:
with open('test.txt', 'w') as f:
# do something
with代码块结束后,无论程序是否发生错误,会自动调用close方法来关闭文件
最后总结起来,代码如下:
首先是写文件:
>>> fobj = open('test.txt', 'w')
>>> fobj.write('hello world!\n')
13
>>> fobj.write('I am Lee.\n')
10
>>> fobj.close()
然后读取这个写入的文件:
>>> fobj = open('test.txt') # 默认模式为读模式'r'
>>> fobj.read(10) # 读取10个字符
'hello worl'
>>> fobj.read() # 读取剩下的全部字符
'd!\nI am Lee.\n'
>>> fobj.close() # 没有对文件进行修改可不调用
其它文件操作方式
迭代文件
我们读取文件的时候还可以使用for循环进行迭代,代码如下:
>>> for line in open('test.txt'):
... print(line, end='') # end参数表示字符串最后附加的字符,默认为换行符
...
hello world!
I am Lee.
>>>
可以看到,每次循环我们得到文件的一行内容,在这里我们没有关闭文件,但是这没有必要,因为我们只是读文件,并没有改变文件的内容。
这种读取文件的方法是我们最常用的方法。
随机访问
刚才我们说过,文件的操作都是从头到尾按顺序进行的,若想“回头”,就需要使用seek方法重新设置文件指针,具体用法如下:
fobj.seek(offset[, whence])
offset参数表示偏移量,正数为向后偏移,负数为向前偏移,0表示不偏移;whence参数表示起始位置,默认是0(表示相对于文件开头,偏移量为非负数),其它取值还有1(相对于当前位置,偏移量可正可负可0,),2(相对于文件末尾,偏移量为非正数)。
同时还可以配合tell方法来使用,tell方法返回当前文件指针位置。
具体可以看下面的例子:
>>> f = open('test.txt', 'w+b') # 由于文本模式whence只能使用0,故使用二进制模式操作
>>> f.write(b'hello world') # b''为字节串类型,类似字符串,二进制模式文件操作基于字节串
11
>>> f.tell() # 获取当前文件指针位置
11
>>> f.seek(-5, 2) # 定位到文件尾部向前5个字节
6
>>> f.read(6)
b'world'
>>> f.tell() # 获取当前文件指针位置
11
>>> f.seek(-7,1) # 向前7个字节
4
>>> f.write(b'haha')
4
>>> f.seek(0) # 相当于f.seek(0,0) 定位到文件头部
0
>>> f.read() # 读取所有文件内容
b'hellhaharld'
>>> f.close() # 关闭文件
好了,本节教程就此结束,感谢读者的阅读,下一节教程要等到高考完了才有时间更新咯~
ヾ( ̄▽ ̄)Bye~Bye~
python教程(八)·文件操作的更多相关文章
- python基础八---文件操作
1.文件操作 XXXXX.txt 1.文件路径:d:\XXXXX.txt(绝对路径) 2.编码方式:utf-8 gbk 3.操作方式:只读.只写.追加.读写.写读.... 排错: 以什么编码方式储存的 ...
- Python爬虫与数据分析之进阶教程:文件操作、lambda表达式、递归、yield生成器
专栏目录: Python爬虫与数据分析之python教学视频.python源码分享,python Python爬虫与数据分析之基础教程:Python的语法.字典.元组.列表 Python爬虫与数据分析 ...
- Python入门篇-文件操作
Python入门篇-文件操作 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.文件IO常用操作 open:打开 read:读取 write:写入 close:关闭 readlin ...
- python基础篇(文件操作)
Python基础篇(文件操作) 一.初始文件操作 使用python来读写文件是非常简单的操作. 我们使用open()函数来打开一个文件, 获取到文件句柄. 然后通过文件句柄就可以进行各种各样的操作了. ...
- python os&shutil 文件操作
python os&shutil 文件操作 # os 模块 os.sep 可以取代操作系统特定的路径分隔符.windows下为 '\\' os.name 字符串指示你正在使用的平台.比如对于W ...
- python 历险记(三)— python 的常用文件操作
目录 前言 文件 什么是文件? 如何在 python 中打开文件? python 文件对象有哪些属性? 如何读文件? read() readline() 如何写文件? 如何操作文件和目录? 强大的 o ...
- Python的高级文件操作(shutil模块)
Python的高级文件操作(shutil模块) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 如果让我们用python的文件处理来进行文件拷贝,想必很多小伙伴的思路是:使用打开2个 ...
- Python之常用文件操作
Python之常用文件操作
- Python基础知识(八)----文件操作
文件操作 一丶文件操作初识 ###f=open('文件名','模式',编码): #open() # 调用操作系统打开文件 #mode #对文件的操作方式 #encoding # 文件的编码格式 存储编 ...
- python学习之路-3 初始python数据类型以及文件操作
本篇涉及内容 set集合 函数 三元运算 文件操作 set集合 set是一个无序的且不重复的元素集合 1.创建set集合的方法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ...
随机推荐
- java.lang.UnsatisfiedLinkError: /usr/openv/java/jre/lib/amd64/libawt_xawt.so: libXtst.so.6: cannot open shared object file: No such file or directory
解决办法: 在radhat 或者centos系统中运行一下命令即可:yum install libXext.x86_64yum install libXrender.x86_64yum install ...
- java中形参的可变参数的定义(如String... args) .
如果有下面的一个笔试题: 已知我们有如下的调用关系 logIt(”log message 1 “); logIt(”log message2”, " log message3”); logI ...
- SQL监控:mysql及mssql数据库SQL执行过程监控审计
转载 Seay_法师 最近生活有很大的一个变动,所以博客也搁置了很长一段时间没写,好像写博客已经成了习惯,搁置一段时间就有那么点危机感,心里总觉得不自在.所以从今天起还是要继续拾起墨笔(键盘),继续好 ...
- 使用python 操作liunx的svn,方案二
在对liunx操作svn的方式,做了改动,使用python的,subprocess进行操作 在第一种方案中,我使用了先拉到本地,然后再创建,在进行上传,实际在svn中可以直接创建文件,并进行文件复制, ...
- windows、linux互传文件
2.常用的为上传下载 1).get 从远程服务器上下载一个文件存放到本地,如下: 先通过lcd切换到本地那个目录下,然后通过get file >> lcd d:\ # ...
- [19/04/13-星期六] 网络编程_基本概念(关注传输层、数据传输,TCP和UDP)
一.概念 ▪ 什么是计算机网络? 计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统, 网络管理软件及网络通信协议的管理和协调下,实现资源共享和信 ...
- 【转】如何开发自己的HttpServer-NanoHttpd源码解读
现在作为一个开发人员,http server相关的内容已经是无论如何都要了解的知识了.用curl发一个请求,配置一下apache,部署一个web server对我们来说都不是很难,但要想搞清楚这些背后 ...
- Selenium自动化测试之结果处理
Selenium自动化测试之结果处理 一.断言 断言相当于性能测试中的检查点,常用断言种类很多,具体可以查看断言API:判断预期结果和实际结果是否一致,断言成功,程序继续处理,失败则终止运行,示例如下 ...
- 为何.NET Core控制台项目发布后是一个dll文件,而不是exe文件?
项目中有一个.NET Core控制台项目叫ConsoleCoreApp,写好代码后准备发布: 结果发布后生成的是一个dll文件...为不是一个exe的可执行文件: 后来了解到.NET Core的项目分 ...
- ORA-00600:internal error code,arguments:[keltnfy-idmlnit],[46],[1],[],[],[],[],[]
如图:在DBCA进行到3%时.报错 由于/etc/hosts与/etc/sysconfig/network不正确应,所以报错 [root@ocm2 ~]# cat /etc/hosts # Do no ...