一、文件的操作

文件句柄 = open('文件路径+文件名', '模式')

例子

f = open("test.txt","r",encoding = “utf-8”)

  

分析:这里由于python文件和test.txt文件在同一文件夹里,不需要写test的绝对路径

如果要写绝对路径可以这样写

f = open(file = "d:/python/test.txt","r",encoding = “utf-8”)

  

文件打开模式有以下几种模式

1、文本文件的打开模式

“r” ,只读模式【默认模式,文件必须存在,不存在则抛出异常】

“w”, 只写模式【不可读;不存在则创建;存在则清空内容】

"a",只追加写模式【不可读;不存在则创建;存在则只追加内容】

就是以二进制的方式打开文件,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码

"+" 表示可以同时读写某个文件

"r+",读写【可读,可写】

"w+",写读【可读,可写】

"a+",写读【可读,可写】

2、readable()、writable()

readable()判断文件是否可读,返回True或者False,

writable()判断文件是否可写,返回True或者False,

例子

f.readable()

f.writable()

3、read()、readline() 、readlines()

f.read() #读取所有内容,光标移动到文件末尾

字符串的形式返回结果,read([size])方法从文件当前位置起读取size个字节,若无参数size,则表示读取至文件结束为止

f.readline() #读取一行内容,光标移动到第二行首部

以字符串的形式返回结果

f.readlines() #读取每一行内容,存放于列表中

读取文本所有内容,将每一行作为一个列表的元素,并且以列表的格式返回结果,但读取大文件会比较占内存。

4、write()、writelines( )

write()要写入字符串

writelines()既可以传入字符串又可以传入一个字符序列,并将该字符序列写入文件。 注意必须传入的是字符序列,不能是数字序列。

  f.write('1111\n222\n') #针对文本模式的写,需要自己写换行符
f.write('1111\n222\n'.encode('utf-8')) #针对b模式的写,需要自己写换行符
f.writelines(['333\n','444\n']) #文件模式
f.writelines([bytes('333\n',encoding='utf-8'),'444\n'.encode('utf-8')]) #b模式

  

5、f.close() #关闭文件f.closed()#查看文件是否关闭

用open方法打开文件后,必须用f.close()关闭文件

文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限的。

f.closed()#查看文件是否关闭,返回True或者False

6、with open as f打开方法

这种打开文件的方式不用写f.closed关闭文件

例子

  with open('/path/to/file', 'r') as f:
with open("test.txt","r",encoding = “utf-8”) as f:

  

7、 对于非文本文件,我们只能使用b模式

非文本文件的打开模式,只能使用b模式,"b"表示以字节的方式操作(而所有文件也都是以字节的形式存储的,使用这种模式无需考虑文本文件的字符编码、图片文件的jgp格式、视频文件的avi格式,b模式可以跨平台使用)

"rb"

"wb"

"ab"

f = open("test.py","rb")

分析:注意这里不能在加,encoding = “utf-8”,因为这里是以二进制的方式打开,不需要再设置打开的编码方式

例子

  f = open("test.py","rb")
data = f.read()
print(data)

  

test.py文件内容:

输出

b'"111"\r\n"2222"\r\n"3333"\r\n\xe4\xbd\xa0\xe5\xa5\xbd'

  

分析:这里的\r\n是Windows平台的换行,以b开头代表输出的是字节形式

这里的\xe4\xbd\xa0\xe5\xa5\xbd'代表汉字

  f = open("test.py","rb")
data = f.read()
print(data.decode("utf-8"))

  

输出结果

"111"
"2222"
"3333"
你好

  

分析:这里在test.py文件存储时用的是utf-8存储的,在打印输出的时候以"utf-8"进行解码即可输出结果。

以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码

例子2

f = open("test11.py","wb")f.write("111\n")

f.close()

  

输出结果:出错,提示这里需要字节,而不是字符串形式,这里写入必须以字节形式写入

可改为

  f = open("test11.py","wb")
f.write(bytes("111\n",encoding="utf-8"))
f.close()

  

分析:这里就可以把字符串“111\n”写入文件了,这里bytes()一定要指定一个编码。

或者直接对字符串进行编码,不用bytes()方法

f = open("test11.py","wb")
f.write("222\n".encode("utf-8"))
f.close()

  

8、f.encoding

取文件打开的编码

例子

  
  f = open("test11.py","w",encoding="gbk")
f.write("222\n")
f.close()
print(f.encoding)

  

输出

gbk

  

分析:这里取的是文件打开的编码,即open语句里的编码,与源文件实际的编码无关。

9、f.flush() 、f.tell()

f.flush() 立刻将文件内容从内存刷到硬盘,这里需要用命令提示行操作,在pycharm里会直接将写入内容写入硬盘,不需要flush()

f.tell()获取当前光标所在的位置

10、文件内光标移动

read(3):

a、文件打开方式为文本模式时,代表读取3个字符

b、文件打开方式为b模式时,代表读取3个字节

read()默认读取整个文件

其余的文件内光标移动都是以字节为单位如seek,tell,truncate

例子

test.txt文件内容

  
  f = open("test.txt","rb")
data = f.read(6)
f.close()
print(data)

  

输出结果

b'111\r\n2'

  

分析:这里的111算3个字节,\r\n算2个字节,2算1个字节,这里是b模式,以字节进行计算,这里不能指定编码即不能写encoding = "xx",否则会报错

例子2

文件内容与上面相同

  
  f = open("test.txt","r+",encoding="utf-8")
data = f.read(6)
f.close()
print(data)

  

输出结果

111
22

  

分析:这是文本模式,这里的111算3个字符,换行符\r\n算一个字符,22算2个字符,共计6个字符。

11、seek()

seek()移动文件光标到到指定位置。

seek()语法

  f.seek(offset[, whence])

offset即移动多少个字节数,whence有0,1,2三种模式,0 代表文件开始算, 1 代表当前位置开始算, 2 代表文件末尾开始算,默认是0。其中1和2必须在b模式下进行,但无论哪种模式,都是以bytes为单位移动的,Widnows 系统下的换行代表2个字节大小(\r\n)。

例子

test.txt文件内容

  
  f = open("test.txt","r+",encoding="utf-8")
f.seek(3,0)
data = f.read()
f.close()
print(data)

  

输出结果

222
333
你好
444
aaa
bbb
ccc
555

  

例子2

文件内容与上面相同

  
  f = open("test.txt","rb")
f.seek(5)
f.seek(11,1)
print(f.tell())

data = f.read()
f.close()
print(data)

  

输出结果

16

b'\xbd\xa0\xe5\xa5\xbd\r\n444\r\naaa\r\nbbb\r\nccc\r\n555'

  

分析

这里是以二进制打开的,111算3个字节,后面有个看不见的\r\n换行符,因此,seek(5)的位置就是第一行的最后

seek(11,1)是从当前位置继续移动光标,即222\r\n算5个字节,同理333\r\n算5个字节,“你好”(文本文件是utf-8编码的)算6个字节,因此这时只取“你”这个字的3个字节的第一个字节,光标移动到你的第一个字节之后,所以最后输出了\xbd\xa0\xe5\xa5\xbd共5个字节。

注意这里的光标操作要用seek()方法,直接用鼠标移动光标是无效的。

例子3

文件内容

  
  f = open("test.txt","rb")
offs = -20
while True:
f.seek(offs,2)
data = f.readlines()
if len(data) > 1:
print("文件的最后一行是%s"%data[-1].decode("utf-8"))
breakf = open("test.txt","rb")
offs = -20
while True:
f.seek(offs,2)
data = f.readlines()
if len(data) > 1:
print("文件的最后一行是%s"%data[-1].decode("utf-8"))
break

  

这里目的是在不知道一行是多少字节的情况下输入最后一行

输出结果

文件的最后一行是2018-04-15 nicholas 学习了520分钟

分析:seek(-20,2)是从文件的最后开始计算的,必须以b模式进行。

12、 truncate()

truncate() 方法用于从文件的首行首字节开始截断,截断文件为 size 个字节,无 size 表示从当前位置截断;截断后面的所有字节被删除,其中 Widnows 系统下的换行代表2个字节大小。

例子

文件内容

  
  f = open("test.txt","r+")
f.truncate(10)
data = f.read()
print(data)

  

输出结果

111

aaa

  

分析:这里是以字节进行计算的,111算3个字节,后面的换行符算2个字节,所以这里截取了111aaa和之后的2个换行符,共计10个字节。

Python之路(第九篇)Python文件操作的更多相关文章

  1. Python【第三篇】文件操作、字符编码

    一.文件操作 文件操作分为三个步骤:文件打开.操作文件.关闭文件,但是,我们可以用with来管理文件操作,这样就不需要手动来关闭文件. 实现原理: import contextlib @context ...

  2. python之路(5)文件操作(open)

      目录 前言 文件的打开模式 文件句柄的方法 seek()方法介绍 前言 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 f = open('demo.txt','r',e ...

  3. Python学习系列(五)(文件操作及其字典)

    Python学习系列(五)(文件操作及其字典) Python学习系列(四)(列表及其函数) 一.文件操作 1,读文件      在以'r'读模式打开文件以后可以调用read函数一次性将文件内容全部读出 ...

  4. Python全栈开发之路 【第三篇】:Python基础之字符编码和文件操作

    本节内容 一.三元运算 三元运算又称三目运算,是对简单的条件语句的简写,如: 简单条件语句: if 条件成立: val = 1 else: val = 2 改成三元运算: val = 1 if 条件成 ...

  5. Python之路【第三篇】:文件操作

    一.文件操作步骤 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 歌名:<大火> 演唱:李佳薇 作词:姚若龙 作曲:马奕强 歌词: 有座巨大的停了的时钟 倾倒在赶 ...

  6. Python全栈之路4--内置函数--文件操作

    上节重点回顾: 判断对象是否属于某个类,例如: 列表中有个数字,但是循环列表判断长度,用len会报错;因为int不支持len,所以要先判断属于某个类,然后再进行if判断. # isinstance(对 ...

  7. Python学习—基础篇之文件操作

    文件操作 文件操作也是编程中需要熟练掌握的技能,尤其是在后台接口编写和数据分析过程中,对各种类型的文件进行操作,获取文件信息或者对信息进行存储是十分重要的.本篇博客中将主要对常见的文本格式文件和Exc ...

  8. Python基础【day03】:文件操作(六)

    一.概述 我们工作中需要经常操作文件,下面就讲讲如何用Python操作文件 1.文件操作的流程: 打开文件,得到文件句柄赋值给一个变量 通过文件句柄,对文件进行操作 关闭文件 二.入门 1.语法 op ...

  9. 小白学 Python(18):基础文件操作

    人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...

随机推荐

  1. pandas.DataFrame.to_excel

    1. file_name = 'aa.xlsx' df.to_excel(file_name) #这种file_name不能重复,已经生成过的就会报错 writer = pd.ExcelWriter( ...

  2. svn git 必须理解的概念

    不都是SCM代码管理嘛,有很大区别么?很多svn老鸟都是抱着这样的心态去学习git,然后无一幸免地陷入“查阅过很多资料,依然掌握不好”的困境,至少我们团队是这样的. 网上的资料确实已经很多了,却没有把 ...

  3. macaca自动化测试以及配置环境问题

    macaca 测试和环境问题 标签(空格分隔): macaca自动化配置环境问题 macaca环境变量配置 基本环境需要准备的东西: JDK的安装及环境配置:(1.8) Node.js的安装及环境配置 ...

  4. as2.0 清除主时间轴上所有的影片简介

    for (var i in _root) { if (typeof _root[i] == "movieclip") { _root[i].swapDepths(1); _root ...

  5. 变态跳台阶(python)

    题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级.求该青蛙跳上一个n级的台阶总共有多少种跳法. # -*- coding:utf-8 -*- class Solution: ...

  6. 第二章 向量(d3)有序向量:Fibonacci查找

  7. 1009 数字1的数量 数位dp

    1级算法题就这样了,前途渺茫啊... 更新一下博客,我刚刚想套用数位dp的模板,发现用那个模板也是可以做到,而且比第二种方法简单很多 第一种方法:我现在用dp[pos][now]来表示第pos位数字为 ...

  8. 解决 HDFS 开发 java.lang.IllegalArgumentException: java.net.UnknownHostException: hadoop000

    出现这种问题多半是windows找不到linux主机所以在 这个路径下的hosts加上linux ip地址,主机名就可以了

  9. 【转】web.xml配置项详解

    史上最全web.xml配置文件元素详解   一.web.xml配置文件常用元素及其意义预览 1 <web-app> 2 3 <!--定义了WEB应用的名字--> 4 <d ...

  10. Cisco无线AP上联口为trunk时无法注册故障处理

    网络环境:WLC5520  AP:1832i-h-k9 客户实施过程中电话告知其将AP和交换机互联的端口类型设置为TRUNK口后,AP无法注册到WLC上,后经过查看配置发现客户用于AP管理的VLAN为 ...