python的文件处理函数是open()

以下主要是关于这个函数的一些学习笔记

1、文件处理离不开编码

要注意的是文件打开时的编码和文件保存时的编码的统一,这样才能保证你打开的文件不会存在乱码

总结:创建文件、打开读取文件、写文件保存文件时的编码必须统一,否则可能存在乱码问题

2、操作文件时要有始有终

意思就是当你打开文件的时候,要记得关闭文件操作。否则会浪费系统的资源。

3、open函数(重点)

(1)、open的语法

open('文件路径','操作模式','编码')

例子:

new_file = open('newfile.txt','w',encoding='utf-8')  
#这里是以utf8编码,以写的模式打开文件newfile.txt,new_file为在系统中获得的文件句柄,只有获得了文件句柄才能操作文件
data = 'my test data'
new_file.write(data)
new_file.close()

(2)、open函数的文件操作模式

r模式:只读模式,是open函数的默认模式,如果不是特殊指定,默认以r模式打开。

w模式:只写模式,指定了此种模式的话文件只能写,不能读。

注意:如果只有w模式的话,打开文件的时候会清空文件内容重新开始写操作。如果文件不存在就创建

x模式:只写模式,只能写不能读,和w模式的区别就在,如果文件存在就报错,不存在会创建新文件

a模式:追加模式,指定此模式的话文件是以最佳的模式在文件最末尾开始写操作。

r+模式:读写模式,此模式下文件既可以读又可以写。

w+模式:写读模式,此模式下可以写也可以读,

注意的是,指定这种模式的话也会清空文件从新开始写。如果文件不存在就创建。

x+模式:写读模式

注意:和w+的区别就是,如果文件存在就报错,如果不存在就重新创建

a+模式:写读追加模式:

rb模式:以二进制的模式进行读文件操作

wb模式:以二进制的模式进行写操作

xb模式:以二进制的模式进行写操作

ab模式:以二进制的模式进行追加写操作

注意1:如果你写的代码存在跨平台的话,就要以二进制的模式进行读写操作。

注意2:如果要以二进制的模式进行读写操作,内容需要进行编码转换才便于直观的读写。

例子:

new_file = open('newfile1.txt','wb')
data = '这里我要写内容了,test data\n'
new_file.write(data.encode('utf-8'))
new_file.close()

(3)、文件内置方法flush

这里要清楚的一个概念是,文件的数据操作,都是在内存进行的,如果没有flush或者close的话,是不会落地到文件的。

例子:

import time
with open('newfile.txt','r+') as f:
list = ['aaaaa\n','bbbbbb\n','ccccc\n','ddddd\n']
for i in list:
f.write(i)
f.flush()
time.sleep(2)

以上例子就可以看出效果每写一行,你在打开的文件刷新一下就能看到数据落地到文件。  

(4)、TextIOWrapper的相关方法

def close(self):  #保存和关闭文件
"""Flush and close this stream. :rtype: None
"""
pass def fileno(self): # 返回一个整型的文件描述符(file descriptor FD 整型),可用于底层操作系统的 I/O 操作。
"""Return the underlying file descriptor (an integer) of the stream if
it exists. :rtype: int
"""
return 0 def flush(self): # 将内存的数据刷新到文件里
"""Flush the write buffers of the stream if applicable. :rtype: None
"""
pass def isatty(self): # 如果文件连接到一个终端设备返回 True,否则返回 False。
"""Return True if the stream is interactive (i.e., connected to a
terminal/tty device). :rtype: bool
"""
return False def readable(self): # 判断文件当前状态是否刻度
"""Return True if the stream can be read from. :rtype: bool
"""
return False def readline(self, limit=-1): # 读取整行,包括‘\n’字符
"""Read and return one line from the stream. :type limit: numbers.Integral
:rtype: unicode
"""
pass def readlines(self, hint=-1): # 读取所有行,并以列表的形式返回
"""Read and return a list of lines from the stream. :type hint: numbers.Integral
:rtype: list[unicode]
"""
return [] def seek(self, offset, whence=io.SEEK_SET): #获取当前光标所在的位置
"""Change the stream position to the given byte offset. :type offset: numbers.Integral
:type whence: numbers.Integral
:rtype: None
"""
pass def seekable(self): # 是否可获取文件当前的位置
"""Return True if the stream supports random access. :rtype: bool
"""
return False def tell(self): # 返回文件当前位置
"""Return the current stream position. :rtype: int
"""
return 0 def truncate(self, size=None): #截取文件,截取的字节通过死泽指定。默认为当前的文件位置
"""Resize the stream to the given size in bytes (or the current
position if size is not specified). :type size: numbers.Integral | None
:rtype: None
"""
pass def writable(self): #文件当前状态是否可写
"""Return True if the stream supports writing. :rtype: bool
"""
return False def writelines(self, lines): # 向文件写入一个序列字符串列表,如果需要换行则要加入每一行的换行符。
"""Write a list of lines to the stream. :type lines: collections.Iterable[unicode]
:rtype: None
"""
pass

下面有关一个seek获取文件最后一行的操作例子:

with open('newfile.txt','rb+') as f:
#for i in f: #这里的for循环是可以拿掉的,如果文件很大最好加上这个for循环
offs = -10 #设置一个偏移量
while True:
f.seek(offs,2) # 通过偏移量从文件的末尾往前读文件,
data = f.readlines() #将读到的文件以列表的形式返回
if len(data) > 1: #大于1代表已经读取到了最后一行和倒数第二行的某几个字节,这样取列表最后一个元素就是文件的最后一行
print("文件的最后一行:%s" %(data[-1].decode('utf-8')))
break
offs *= 2 #如果等于1 那就有可能偏移量太小而导致最后一行读不全。

  

4、让系统帮我们自动关闭文件句柄

这里就要用到with open('文件路径','操作模式') as f:

例子:

with open('newfile1.txt','rb+') as f:
data = f.read()
print(data.decode('utf-8'))

  

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

  1. $《利用Python进行数据分析》学习笔记系列——IPython

    本文主要介绍IPython这样一个交互工具的基本用法. 1. 简介 IPython是<利用Python进行数据分析>一书中主要用到的Python开发环境,简单来说是对原生python交互环 ...

  2. Python 开发与接口测试学习笔记

    这是我跟着虫师学习中积累下来的学习笔记,写得比较简单,适合想学习Python开发与接口测试的初学者学习. 一.开发投票系统 1.参考官网文档,创建投票系统. https://docs.djangopr ...

  3. python基础教程_学习笔记12:充电时刻——模块

    充电时刻--模块 python的标准安装包含一组模块,称为标准库. 模块 >>> import math >>> math.sin(0) 0.0 模块是程序 不论什 ...

  4. Python框架之Django学习笔记(十七)

    Django框架之表单(续二) 今天的这篇博客将是Django学习笔记博客的最后一篇,基本每周最少一篇的Django框架学习,坚持到今天也实属不易,当然了,这个框架的学习仅仅是Django框架的基础部 ...

  5. C# IO流与文件读写学习笔记

    本笔记摘抄自:https://www.cnblogs.com/liyangLife/p/4797583.html,记录一下学习过程以备后续查用. 一.文件系统 1.1文件系统类的介绍 文件操作类大都在 ...

  6. Python框架之Django学习笔记(四)

    第一个基于Django的页面:Hello World 正如我们的第一个目标,创建一个网页,用来输出这个著名的示例信息:Hello world. 第一个视图 Hello world视图非常简单. 这些是 ...

  7. python基础课程_学习笔记21:文件和材料

    文件和材料 打开文件 open功能是用来打开文件,语法例如,下面的: open([name[,mode[,buffering]]) open函数使用一个文件名称作为唯一的强制參数,然后返回一个文件对象 ...

  8. 【Python】logging模块学习笔记

    因为做接口自动化测试遇到的一个代码逻辑上的问题,又不知道具体问题出在哪里,所以在模块化代码之前,先学习下python的日志模块logging. 入门1 入门2 日志级别大小关系为:CRITICAL & ...

  9. python基础教程_学习笔记14:标准库:一些最爱——re

    标准库:一些最爱 re re模块包括对正則表達式的支持,由于以前系统学习过正則表達式,所以基础内容略过,直接看python对于正則表達式的支持. 正則表達式的学习,见<Mastering Reg ...

随机推荐

  1. CentOS6.5配置PHP CI程序

    步骤: 1.安装CentOS6.5系统:     1.选择PHP+Mysql环境 2.关闭防火墙和SeLinux     1.chkconfig --level 35 iptables off     ...

  2. C++设计模式之代理模式

        IPhone 6已经在中国香港开售了,圆了在专卖店等候一个多月苹果粉丝的苹果梦.然而对中国大陆而言.须要到9月17日苹果才在大陆开售.这对中国大陆的粉丝而言,不亚于一种煎熬,因此而滋生一种代购 ...

  3. rac_安装软件时报版本号过高问题

    原创作品,出自 "深蓝的blog" 博客.欢迎转载,转载时请务必注明下面出处,否则追究版权法律责任. 深蓝的blog:http://blog.csdn.net/huangyanlo ...

  4. Oracle 数据库的连接

    仿照http://blog.csdn.net/makenothing/article/details/17080069 1 建立Oracle连接 VS2010中加入数据库连接 得到连接字符串 Data ...

  5. poj 2828 Buy Tickets (线段树 单节点 查询位置更新)

    Buy Tickets Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 15533   Accepted: 7759 Desc ...

  6. nginx反向代理批量实现https协议访问

    我们进入大多数HTTPS网站ie浏览器都会给出相关提醒了,但我配置了一台HTTPS代理机器发现css与js都加载不了,这个有朋友说是https页面,如果加载http协议的内容,会被认为页面不安全,所以 ...

  7. out传值

    public void Out(out int a, out int b)        {//out相当于return返回值            //可以返回多个值            //拿过 ...

  8. hdu5794 A Simple Chess 容斥+Lucas 从(1,1)开始出发,每一步从(x1,y1)到达(x2,y2)满足(x2−x1)^2+(y2−y1)^2=5, x2>x1,y2>y1; 其实就是走日字。而且是往(n,m)方向走的日字。还有r个障碍物,障碍物不可以到达。求(1,1)到(n,m)的路径条数。

    A Simple Chess Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)To ...

  9. mysql 索引优化,索引建立原则和不走索引的原因

    第一:选择唯一性索引 唯一性索引的值是唯一的,可以更快捷的通过该索引来确定某条记录. 2.索引的列为where 后面经常作为条件的字段建立索引 如果某个字段经常作为查询条件,而且又有较少的重复列或者是 ...

  10. Oracle 数据库排错之 ORA-00600

    [错误代码] ORA-00600 [问题描述] ORA-00600: [kcratr1_lastbwr]错误的处理办法 [问题分析] 出现该错误是因为系统强制关机造成的!症状为数据库无法打开! [问题 ...