Python:文件操作总结1——文件基本操作
一、文件的操作流程
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——文件基本操作的更多相关文章
- 孤荷凌寒自学python第三十五天python的文件操作之针对文件操作的os模块的相关内容
孤荷凌寒自学python第三十五天python的文件操作之针对文件操作的os模块的相关内容 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.打开文件后,要务必记得关闭,所以一般的写法应当 ...
- JAVASE02-Unit06: 文件操作——File 、 文件操作—— RandomAccessFile
Unit06: 文件操作--File . 文件操作-- RandomAccessFile java.io.FileFile的每一个实例是用来表示文件系统中的一个文件或目录 package day06; ...
- Unix无缓冲文件操作函数、文件信息查询
问题描述: Unix无缓冲文件操作函数.文件信息查询 问题解决: struct stat 结构体信息: 具体代码: 具体源文件:
- JAVA文件操作类和文件夹的操作代码示例
JAVA文件操作类和文件夹的操作代码实例,包括读取文本文件内容, 新建目录,多级目录创建,新建文件,有编码方式的文件创建, 删除文件,删除文件夹,删除指定文件夹下所有文件, 复制单个文件,复制整个文件 ...
- java文件操作(普通文件以及配置文件的读写操作)
转自:java文件操作(普通文件以及配置文件的读写操作) 读取普通文件 : /** * xiangqiao123欢迎你 如果对代码有疑问可以加qq群咨询:151648295 * * 读取MyFile文 ...
- 文件操作 - 三元运算/chardet/文件操作r w/文件的操作方法
Alex:读书可以改变一个人的气质读书:豆瓣: 1年读20本 你的问题:想法太多,读书太少 书:追风筝的人,白鹿原 电影:阿甘正传 辛德勒名单---------------------------- ...
- C语言 文件操作10--配置文件读写
//配置文件读写项目 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include ...
- PHP 文件操作类(创建文件并写入) 生成日志
<?php /** * 文件操作(生成日志)支持多条插入 * (假设插入多条语句并换行 用','逗号分开) * */ class log { public $path = './info.txt ...
- day8 八、文件操作模式、文件的复制与文件游标操作
一.文件操作 1.wr模式结合 ① w = open('1.txt', 'w', encoding='utf-8') # w:没有文件新建文件,有文件就清空文件 w.write('000\n') w. ...
随机推荐
- VS2015调试,签名时出错: 未在路径 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\signtool.exe 找到 SignTool.exe
1.发布项目是出现这个错误网上找了有两种方式, 一种是重新安装VS2015的ClickOnce程序 第二种是修改项目文件的签名 右击项目文件的属性,选择签名,然后把红框内去掉,保存即可.
- 使同一个server上不同port的django应用可在同一个浏览器上打开
如果我们有两个django应用site1和site2同时跑在同一个server的不同端口,同时我们在同一个浏览器的不同tab登录.那么这时就出出现这种情况,当我们登录site2时就会将site1上登录 ...
- docker环境下构建flannel 网络
flannel 是coreos 开发的网络解决方案,为每一台主机分配一个 subnet,容器从此subnet 中分配ip,ip可以在主机间路由.每个subnet从更大的ip池中划分,为了在各个主机间共 ...
- Linux IO多路复用 poll
Linux IO多路复用 poll 之前曾经提到过 select poll 跟select类似,poll改进了select的一个确定,就是poll没有监听上限 不过poll还是需要遍历以及频繁的把数组 ...
- scala 求数组排序后每两个元素的差值
求数组排序后每两个元素的差值 例如数组 1,5,8,10,2 求得结果为 1,3,3,2 一般什么样的场景会有这种需求呢? 比如 计算一堆数据在一定时间内的计算时延, 或者得到这段时间内数据的平均计算 ...
- Titanic幸存预测分析(Kaggle)
分享一篇kaggle入门级案例,泰坦尼克号幸存遇难分析. 参考文章: 技术世界,原文链接 http://www.jasongj.com/ml/classification/ 案例分析内容: 通过训练集 ...
- Find the Duplicate Number (寻找重复数字)
对于一个长度为n+1的数组,其中每一个值的取值范围是[1,n],可以证明的是必然存在一个重复数字(抽屉原理),假设仅存在一个重复数字,找到他. 举例:输入:[1,3,4,2,1],输出:1 自己做的时 ...
- 20155207 实验四 《Android程序设计》实验报告
20155207 实验四 <Android程序设计>实验报告 实验名称 Android程序设计 实验内容 1.Android Stuidio的安装测试: 参考<Java和Androi ...
- 20155229 2016-2017-2 《Java程序设计》第十周学习总结
20155229 2016-2017-2 <Java程序设计>第十周学习总结 教材学习内容总结 网络 网络分为局域网.广域网.城域网 一次HTTP请求包含3个部分:①方法--统一资源标识符 ...
- 20155331 2016-2017-2 《Java程序设计》第10周学习总结
20155331 2016-2017-2 <Java程序设计>第10周学习总结 教材学习内容总结 网络编程 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据.程序员所作的事情就 ...