一、文件的操作流程

1、打开文件,得到文件句柄并赋值给一个变量

2、通过句柄对文件进行操作

3、关闭文件

二、文件的打开与关闭

A、文件的打开——open函数

语法:open(file[,mode[,buffering[,encoding[,errors[,newline[,closefd=True]]]]]])

[参数说明]:

file——文件的位置+文件的名字,需要加引号 [注]:若不指明文件的位置,则默认其位于当前文件夹下

mode——文件的的打开模式

mode的取值 作用
'r' 以只读的方式打开文件。文件的指针会放在文件的开头这是默认模式
'rb' 以二进制的格式打开一个文件用于只读。文件指针会放在文件的开头
'r+' 打开一个文件用于读写。文件指针将会放在文件的开头
'rb+' 以二进制的格式打开一个文件用于读写。文件指针将会放在文件的开头
'w' 打开一个文件只用于写入。如果该文件已经存在则将其覆盖如果该文件不存在,则创建新文件
'wb' 以二进制格式打开一个文件只用于写入。如果该文件已经存在则将其覆盖如果该文件不存在,则创建新的文件
'w+' 打开一个文件用于写读。如果该文件已经存在则将其覆盖如果该文件不存在则创建新的文件
'wb+' 以二进制的格式打开一个文件用于写读。如果该文件已经存在则将其覆盖如果该文件不存在则创建新的文件
'a' 打开一个文件用于追加。如果该文件存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,则创建新的文件进行写入
''ab 以二进制的格式打开一个文件用于追加。如果该文件已经存在,文件指针将会放在文件的结尾如果文件不存在,则创建新的文件进行写入
'a+' 打开一个文件进行读写。如果该文件已经存在,文件指针将会放在文件的结尾,文件打开时会是追加模式。如果该文件不存在,则创建新的文件用于读写
'ab+' 以二进制的格式打开一个文件用于读写。如果该文件已经存在,文件指针将会放在文件的结尾,文件打开时会是追加模式。如果该文件不存在,则创建的新的文件用于读写

[特别注意1]:r+、w+、a+的区别

r+: 具有读写属性,保留原文件中没有被覆盖的内容,该文件必须存在。所写内容添加在原有文件内容之后

 f=open('example.txt','r+',encoding='utf-8')
print(f.readline().strip())
print(f.readline().strip())
f.write('这是新添加的一行\n')
print(f.readline().strip())

w+:具有写读属性,写的时候如果文件存在,会被清空,从头开始写,但可以从文件中读取所写的内容(一般需要借助seek方法)

 f=open('example.txt','w+',encoding='utf-8')
print(f.readline().strip())#pycharm中没有任何输出
print(f.readline().strip())
f.write('这是新添加的一行\n')
print(f.readline().strip())

 a+:a是追加操作,只能写不能读;a+也是追加操作,但既能读也能写
[特别注意2]:"U"表示在读取时,可以将 \r \n \r\n自动转换成 \n (与 r 或 r+ 模式同时使用),如‘rU’、‘’r+U

buffering——可以取0,1,大于1的整数或负数

buffering的取值 作用
0 访问文件时不会有寄存(buffer)
1 访问文件时会寄存行,即line buffer(只使用于文本模式
大于1的整数 设置访问文件时寄存区的缓冲大小
负数 访问文件时的寄存区的缓冲大小为系统默认

encoding——表示返回的数据采用何种编码,一般采用utf-8或者gbk

errors——取值一般有strict、ignore,当取strict的时候,字符编码若出现问题会报错;当取ignore的时候,字符编码如出现问题,程序会忽略而过,继续执行下面的程序

newline——可以取得值有None,\n,\r,\r\n;用于区分换行符,但这个参数只对文本模式有效

closefd——可以取True或False,默认情况下取True

closefd的取值 作用
True 传入的file参数为文件的文件名
False

传入的file参数为文件的文件描述符(文件描述符就是一个非负整数,在Unix内核的系统中,打开一个文件,便会返回一个文件描述符

B、文件的关闭

方法一、fileObjiec.close() 方法

 try:
file=open('example.txt','r')# 打开一个文件
#...对文件的操作
except FileNotFoundError:#也可以是其他异常
#...对异常的处理
finally:
file.close() #关闭文件

[注]:关闭文件后不能再进行读写操作

方法二、with

 with open('example.txt',''r) as f:
f.read()
#....对文件的其他操作

三、文件对象的常用属性

属性 描述
file.name 显示文件的名字
file.closed 判断文件是否关闭。如果文件被关闭,返回True
file.mode 显示文件的打开模式
file.encoding 显示文件的编码类型

file.newlines

显示文件使用的换行模式
 with open('example.txt','w') as f:
print(f.name)
print(f.closed)
print(f.mode)
print(f.encoding)
print(f.newlines)

四、文件的常用操作

A、文件的读取

1.file.read([size]):从文件读取指定的字节数,如果没有给定size参数或size参数为负值则读取文件中的所有内容

2.file.readline([size]):从文件读取整行,包括‘\n’字符。如果制定了一个非负数的参数,则返回指定大小的字节数,包括‘\n’字符

 with open('example.txt','r') as f:
while True:
line=f.readline()
if line:
print(line)
else:
break

3.file.readlines(sizeint):读取文件的所有行(直到结束符EOF)并返回列表,若给定的sizeint>0,返回总和大约为sizeint字节的行,实际读取值可能比sizeint较大,因为需要填充缓冲区。如果碰到结束符EOF则返回空字符串。

 with open('example.txt','r') as f:
lines=f.readlines() #一次读取多行
for line in lines:
print(line)

B、文件的写入

1.file.write([str]):向文件中写入指定的字符串。

[注]:在文件关闭前或缓冲区刷新前,字符串内容存储在缓冲区中,这是你在文件中是看不到写入的内容的

 with open('example.txt','w+') as f:
content='...' #想写入文件中的内容
f.write(content)

2.file.writelines([str]):把列表中存储的内容写入文件

[注]:

(1)换行需要制定换行符\n

(2)writelines()写文件的速度更快。如果需要写入文件的字符串非常多,可以考虑使用writelines(),如果只考虑写入少量的字符串,则可以直接使用write()

 with open('example.txt','w') as f:
content=['My name is Tomwenxing\n','I am 23 years old this year\n','I hope I can have a good job\n']
f.writelines(content)

C、文件的定位

1.file.seek(offset[,whence]):用于移动文件读取指针到指定位置

[参数说明]:

offset——开始的偏移量,也就是代表需要移动偏移的字节数

whence——可选,默认值为0.给offsert参数一个定义,表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起

2.file.tell():返回文件的当前位置,即文件指针当前位置

3.file.__next__():返回文件的下一行,如果到达文件结尾(EOF),则触发StopIteration

[注]:在Python2.x中是file.next()

 with open('example.txt','r') as f:
for index in range(3):
line=f.__next__()
print('第%d行-%s' %(index,line.strip()))

D、文件的其他重要操作

1.file.flush():刷新缓冲区,即将缓冲区中的数据立刻写入文件,同时清空缓冲区,不需要被动的等待输出缓冲区写入

[注]:一般情况下,文件关闭后会自动刷新缓冲区,但使用flush()方法可以手动的刷新缓冲区,从而将缓冲区中的内容写入到打开的文件当中

2.file.isatty():检测文件是否连到一个终端设备,如果是返回True,否则返回False

[注]:在linux中,一切皆为文件,故可以利用此方法判断一个文件代表的是否是一个终端设备

3.file.fileno():返回底层实现使用的整数文件描述符,以从操作系统请求I/O操作

4.file.truncate([size]):用于截断文件,如果指定了可选参数size,则表示截断文件为size个字符。如果没有指定size,则从当前位置起截断;截断之后size后面的所有字符被删除

[注]:

(1)此方法不会在文件处于“只读模式”时打开

(2)如果指定的大小超过了文件当前的大小,其最终的结果依赖于平台

(3)如果打开文件之后就调用truncate方法且不指定size参数的大小,则其效果与清空文件相同

 f=open('example.txt','r+')
print('Name of the file:',f.name)
#文件内容如下:
#This is the 1st line
#This is the 2nd line
#This is the 3rd line
#This is the 4th line
#This is the 5th line
print('Read Line: %s' %f.readline())
f.truncate()
print('Read Line: %s' %f.readline())
f.close()

 f=open('example.txt','r+')
print('Name of the file:',f.name)
#文件内容如下:
#This is the 1st line
#This is the 2nd line
#This is the 3rd line
#This is the 4th line
#This is the 5th line
f.truncate(10)
print('数据读取:',f.read())

5.file.readable():如果打开文件在读模式下(包括'r',‘r+’,‘a+’等),返回True,否则返回False

6.file.writable():如果打开文件在写模式下(包括‘w’,‘w+’,‘a’,‘a+’等),返回True,否则返回False

 f=open('example.txt','a',encoding='utf-8')
print(f.readable())
print(f.writable())

 f=open('example.txt','a+',encoding='utf-8')
print(f.readable())
print(f.writable())

7.file.seekable():如果该文件对象支持seek()方法,返回True,否则返回False

[注]:并不是所有的文件都支持seek方法

Python:文件操作总结1——文件基本操作的更多相关文章

  1. 孤荷凌寒自学python第三十五天python的文件操作之针对文件操作的os模块的相关内容

     孤荷凌寒自学python第三十五天python的文件操作之针对文件操作的os模块的相关内容 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.打开文件后,要务必记得关闭,所以一般的写法应当 ...

  2. JAVASE02-Unit06: 文件操作——File 、 文件操作—— RandomAccessFile

    Unit06: 文件操作--File . 文件操作-- RandomAccessFile java.io.FileFile的每一个实例是用来表示文件系统中的一个文件或目录 package day06; ...

  3. Unix无缓冲文件操作函数、文件信息查询

    问题描述:         Unix无缓冲文件操作函数.文件信息查询 问题解决:        struct stat 结构体信息: 具体代码: 具体源文件:

  4. JAVA文件操作类和文件夹的操作代码示例

    JAVA文件操作类和文件夹的操作代码实例,包括读取文本文件内容, 新建目录,多级目录创建,新建文件,有编码方式的文件创建, 删除文件,删除文件夹,删除指定文件夹下所有文件, 复制单个文件,复制整个文件 ...

  5. java文件操作(普通文件以及配置文件的读写操作)

    转自:java文件操作(普通文件以及配置文件的读写操作) 读取普通文件 : /** * xiangqiao123欢迎你 如果对代码有疑问可以加qq群咨询:151648295 * * 读取MyFile文 ...

  6. 文件操作 - 三元运算/chardet/文件操作r w/文件的操作方法

    Alex:读书可以改变一个人的气质读书:豆瓣: 1年读20本 你的问题:想法太多,读书太少 书:追风筝的人,白鹿原  电影:阿甘正传 辛德勒名单---------------------------- ...

  7. C语言 文件操作10--配置文件读写

    //配置文件读写项目 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include ...

  8. PHP 文件操作类(创建文件并写入) 生成日志

    <?php /** * 文件操作(生成日志)支持多条插入 * (假设插入多条语句并换行 用','逗号分开) * */ class log { public $path = './info.txt ...

  9. day8 八、文件操作模式、文件的复制与文件游标操作

    一.文件操作 1.wr模式结合 ① w = open('1.txt', 'w', encoding='utf-8') # w:没有文件新建文件,有文件就清空文件 w.write('000\n') w. ...

随机推荐

  1. VS2015调试,签名时出错: 未在路径 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\signtool.exe 找到 SignTool.exe

    1.发布项目是出现这个错误网上找了有两种方式, 一种是重新安装VS2015的ClickOnce程序 第二种是修改项目文件的签名 右击项目文件的属性,选择签名,然后把红框内去掉,保存即可.

  2. 使同一个server上不同port的django应用可在同一个浏览器上打开

    如果我们有两个django应用site1和site2同时跑在同一个server的不同端口,同时我们在同一个浏览器的不同tab登录.那么这时就出出现这种情况,当我们登录site2时就会将site1上登录 ...

  3. docker环境下构建flannel 网络

    flannel 是coreos 开发的网络解决方案,为每一台主机分配一个 subnet,容器从此subnet 中分配ip,ip可以在主机间路由.每个subnet从更大的ip池中划分,为了在各个主机间共 ...

  4. Linux IO多路复用 poll

    Linux IO多路复用 poll 之前曾经提到过 select poll 跟select类似,poll改进了select的一个确定,就是poll没有监听上限 不过poll还是需要遍历以及频繁的把数组 ...

  5. scala 求数组排序后每两个元素的差值

    求数组排序后每两个元素的差值 例如数组 1,5,8,10,2 求得结果为 1,3,3,2 一般什么样的场景会有这种需求呢? 比如 计算一堆数据在一定时间内的计算时延, 或者得到这段时间内数据的平均计算 ...

  6. Titanic幸存预测分析(Kaggle)

    分享一篇kaggle入门级案例,泰坦尼克号幸存遇难分析. 参考文章: 技术世界,原文链接 http://www.jasongj.com/ml/classification/ 案例分析内容: 通过训练集 ...

  7. Find the Duplicate Number (寻找重复数字)

    对于一个长度为n+1的数组,其中每一个值的取值范围是[1,n],可以证明的是必然存在一个重复数字(抽屉原理),假设仅存在一个重复数字,找到他. 举例:输入:[1,3,4,2,1],输出:1 自己做的时 ...

  8. 20155207 实验四 《Android程序设计》实验报告

    20155207 实验四 <Android程序设计>实验报告 实验名称 Android程序设计 实验内容 1.Android Stuidio的安装测试: 参考<Java和Androi ...

  9. 20155229 2016-2017-2 《Java程序设计》第十周学习总结

    20155229 2016-2017-2 <Java程序设计>第十周学习总结 教材学习内容总结 网络 网络分为局域网.广域网.城域网 一次HTTP请求包含3个部分:①方法--统一资源标识符 ...

  10. 20155331 2016-2017-2 《Java程序设计》第10周学习总结

    20155331 2016-2017-2 <Java程序设计>第10周学习总结 教材学习内容总结 网络编程 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据.程序员所作的事情就 ...