初学Python——文件操作
一、文件的打开和关闭
1.常用的打开关闭语句
f=open("yesterday","r",encoding="utf-8") #打开文件
f,close() #关闭文件
第一行是打开名为“yesterday”的文件,只读属性,编码方式为utf-8。如果没有指定文件打开方式,默认只读“r”,如果没有指定编码方式可能会部分乱码。
第二行是关闭文件
2.with as语句
目的:为了防止程序员打开文件后忘记关闭文件
with open("yesterday","r",encoding="utf-8") as f:
<代码段>
3.文件打开方式
打开方式 | 是否可读 | 是否可写 | 是否可创建 | 是否会覆盖 | 特点 | 建议 |
r | 是 | 否 | 否 | 否 | 只读,安全 | 推荐 |
r+ | 是 | 追加 | 否 | 有时部分覆盖 | 容易写入出错 | 不建议 |
w | 否 | 是 | 是 | 全覆盖 | 只写 | 谨慎 |
w+ | 否 | 是 | 是 | 全覆盖 |
只写 打开文件即清空 |
不建议 数据非常不安全 |
a | 否 | 追加 | 是 | 否 | 追加不覆盖 | 推荐 |
a+ | 是 | 追加 | 是 | 否 | 全能且安全 | 推荐 |
说明一下:
(1)r:如果只有读取数据的需求,建议用这种,杜绝了对数据破坏的可能。
(2)r+:之所以不推荐它是因为,写入数据的行为难以捉摸,并且可能会因此破坏数据,造成损失。如果不是十分清楚它的习性,不要用它。
写入方式:有时覆盖,有时追加。
当写入操作前一步是读取的时候,这时候不会覆盖数据,在最后追加:
f=open("yesterday3","r+",encoding="utf-8")
print(f.readline()) #读取一行数据
f.write("nihao") #写入数据
f.close()
执行前的文件:
执行后的文件:
当写入操作前一步不是读取的时候,覆盖写入数据,从光标处开始覆盖部分数据:
f=open("yesterday3","r+",encoding="utf-8")
print(f.tell()) #获取光标当前位置
f.write("nihao") #写入数据
f.close()
执行后:
所以,尽量不要用它
(3)w:只能写入数据,并且覆盖之前的全部数据。由于会对之前数据造成丢失,所以使用它时要谨慎。可创建的意思是如果指定打开的文件不存在,则创建一个文件。
(4)w+:不建议此种方式。每次打开文件都会对数据进行清空,即使不进行任何操作。可以这样理解:每次打开时,都会重新创建一个同名文件并覆盖,初始情况下当然是空的。可读可写可创建。
(5)a:可追加,可创建。保证了数据的安全,不会覆盖之前的数据
(6)a+:全能型选手,啥活都能干,而且数据安全,不会覆盖。但是有个特点,文件打开时光标起始位置在最后面,所以导致读取不到数据。(其他方式打开文件时,光标都在开头位置)
来测试一下:
f=open("yesterday3","a+",encoding="utf-8")
print(f.tell()) #获取光标当前位置
print(f.readline()) #读取一行数据
f.close()
运行结果:
当前光标位置327(字符),没有读取到数据。怎么办?将光标移动到开头就好了
f.seek(0) #将光标移动到开头位置
顺利运行:
4. f 是什么?
f 叫做文件句柄。是文件的内存对象,包含文件的大小、文件名、硬盘中的起始位置等信息封装成了一个句柄。
二、文件的写和读
1.写
f.write("123\n")
写入数据时,只能以字符形式,如果是int会出错,并且换行符“\n”也占有相应的字符。
2.读
注意:任何时候进行读取操作,都要看清楚当前光标的位置,才能读到想要的数据。
①将所有数据一次性全部读出来(一般不用,不适合读取大文件)
data=f.read() #data是一个字符串变量
print(data) print(f.read()) #如果这三行代码放到一起,会发现第三行代码读不出来数据,而且也没有报错,实际上是没有注意光标的位置,
要解决很简单,只要将光标移动到初始位置就好了
②只读取有限个字符
print(f.read(5)) #从光标处开始只读取5个字符
③读取一行数据
print(f.readline()) #从光标处开始读取一行数据
④readlines()
也是读取全部数据,但有所不同
a=f.readlines()
a是一个列表,文件中每一行数据都转化成列表的元素。
⑤循环读取数据
for i in range:
print(i)
一行一行地读取数据,读完整个文件。推荐用这种方式,内存中始终只保存一行的数据,可以读大文件。
三、其他常用操作
1.查看当前光标位置
print(f.tell())
2.移动光标位置
f.seek(0) #将光标位置移动到开头
f.seek(10) #移动到第10个字符的位置
3.打印文件的编码
print(f.encoding)
4.判断光标是否可以移动
print(f.seekable())
在linux系统一切皆文件,终端设备文件不能移动光标
5.强制刷新
print(f.flush())
功能是,强制、立即将在此之前写入的数据写入到硬盘中。
在计算机中,往硬盘里写入数据通常不是当即发生的,写入(保存)后,操作系统会给人反馈说,已经将数据存了进去,但实际并没有立即写入,而是现将其存入系统缓存中,等到操作系统认为合适的时候再一次性写入进去。至于为什么这么做,我掌握到的有两点原因:一是提高系统运作效率,由于硬盘读写速度慢,整个程序会因为这个操作变得很慢,卡在这里,整个系统的运作效率很低;二是保护硬盘,用户可以很频繁地执行写入操作,如果硬盘也这么做(跟用户同步),硬盘寿命会大大降低。
所以,flush()方法的作用是立刻刷新硬盘的数据,将之前写入的数据立刻写入硬盘中。
6.判断文件是否关闭
当同时打开的文件很多时,可能不太清楚哪些文件关闭了,哪些文件没有关,可以用closed()方法检测一下
print(f.closed())
7.清除文件数据
f.truncate(10)
除了前10个字符,清空文件所有数据(文件打开方式不可以是“r”,最好是“a”)
清除操作跟当前光标位置无关。如果括号内不写数据,清空所有数据。
四、二进制文件
打开方式:“rb”(只读),“wb”(只写),“ra”(追加)
什么时候会用到二进制打开方式呢?
1.网络传输只能用二进制(至少在Python3.0)
2.操作二进制文件(如果用字符形式可能会出错)
五、文件修改
上面讲了文件的读写等操作,但是写不能等同于改,写只能覆盖或者追加,有什么方法呢?
一般有两种方法:1.将文件数据全部加载到内存里,针对内存里的数据进行修改,然后再写入
2.打开文件,一行一行地读入,修改完后写入新的文件。(循环执行从旧文件读一行,在新文件写一行的操作)
这里推荐第2种方法,不推荐第一种。因为计算机的内存是有限的,第一种方法不合适处理大文件,而第二种不仅合适大文件也保证了数据的安全。
f1=open("yesterday2","r",encoding="utf-8") #打开旧文件
f2=open("yesterday3","w",encoding="utf-8") #打开新文件
oldword=input("请输入待修改的内容:")
newword=input("请输入修改后的内容:")
for line in f1: #迭代器循环
if oldword in line: #如果找到了待修改的内容
line=line.replace(oldword,newword) #字符串替换操作
print("修改成功!")
f2.write(line) #无论是否修改了内容,都将其写入新的文件中 f2.close() #关闭新文件
f1.close() #关闭旧文件
初学Python——文件操作的更多相关文章
- 初学Python——文件操作第二篇
前言:为什么需要第二篇文件操作?因为第一篇的知识根本不足以支撑基本的需求.下面来一一分析. 一.Python文件操作的特点 首先来类比一下,作为高级编程语言的始祖,C语言如何对文件进行操作? 字符(串 ...
- 初学Python——文件操作第三篇
一.引言 什么?有了第二篇文件操作还不够?远远不够!而且在读完第三篇文件操作还是不够.关于文件的操作,后续的学习中将不断学习新的操作方式,使用更加合适的方法. 进入正题,上一篇讲到,Python对文件 ...
- Python基础篇【第2篇】: Python文件操作
Python文件操作 在Python中一个文件,就是一个操作对象,通过不同属性即可对文件进行各种操作.Python中提供了许多的内置函数和方法能够对文件进行基本操作. Python对文件的操作概括来说 ...
- [Python学习笔记][第七章Python文件操作]
2016/1/30学习内容 第七章 Python文件操作 文本文件 文本文件存储的是常规字符串,通常每行以换行符'\n'结尾. 二进制文件 二进制文件把对象内容以字节串(bytes)进行存储,无法用笔 ...
- Python文件操作与函数目录
文件操作 python文件操作 函数 Python函数学习——初步认识 Python函数学习——作用域与嵌套函数 Python函数学习——匿名函数 python内置函数 Python函数学习——递归 ...
- day8.python文件操作
打开和关闭文件 open函数 用Python内置的open()函数打开一个文件,创建一个file对象,相关的方法才可以调用它进行读写. file = open(file_name [, access_ ...
- 关于python 文件操作os.fdopen(), os.close(), tempfile.mkstemp()
嗯.最近在弄的东西也跟这个有关系,由于c基础渣渣.现在基本上都忘记得差不多的情况下,是需要花点功夫才能弄明白. 每个语言都有相关的文件操作. 今天在flask 的例子里看到这样一句话.拉开了文件操作折 ...
- Python之路Python文件操作
Python之路Python文件操作 一.文件的操作 文件句柄 = open('文件路径+文件名', '模式') 例子 f = open("test.txt","r&qu ...
- python 文件操作 r w a
python基础-文件操作 一.文件操作 对文件操作的流程 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 打开文件时,需要指定文件路径和以何等方式打开文件, ...
随机推荐
- 2018-11-16 中文代码示例之Programming in Scala笔记第四五六章
续前文: 中文代码示例之Programming in Scala学习笔记第二三章. 同样仅节选有意思的例程部分作演示之用. 源文档仍在: program-in-chinese/Programming_ ...
- 2018-08-03 中文代码示例之Python-如何遍历字典
此系列之后将参考一些最常用功能的在线教程/示例程序, 进行示例代码的中文化改进. 欢迎推荐有代表性和实用性的教程, 篇幅小更佳. 谢谢. 参考Python - How to loop a dictio ...
- maven将依赖依赖打包到jar中
通过maven-assembly-plugin插件可以实现将依赖jar包打包到自己的jar包中的需求,只需要在pom.xml中配置该插件即可,配置如下: <build> <plugi ...
- 腾讯.NET&PHP面试题
在整个面试过程中,作为面试者的你,角色就是小怪兽,面试官的角色则是奥特曼,更不幸的是,作为小怪兽的你是孤身一人,而奥特曼却往往有好几个助攻,你总是被虐得不要不要的~ 作为复读一年才考上专科的我,遗憾的 ...
- 大数据时代,Wyn Enterprise和您一起探讨CIO的困境和出路 ZT
这是一篇知识分享帖,如果您致力于成为一名CIO,希望您能够阅读完,信息虽然简略,但我们依然希望可以帮到您. CIO:首席信息官 CIO是干什么的 一.经典的CIO主要负责什么 1.IT战略规划.IT预 ...
- iOS----------SVN问题 the operation could not be completed
可能是服务器磁盘满了或者你本地的内存满了
- java 返回某一天的周日和现在这一周的周日
import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Calendar;import j ...
- Android--底部导航栏的动态替换方案
1.通常来说,一般情况下,我们的app的BottomTab会有集中实现方式. 自定义view,然后自己写逻辑去实现互斥. 自由度最高,因为啥都是自己写的. 使用RadioGroup+RadioButt ...
- 确认是否是因为做了物理I/O而导致的性能不佳
要获取语句是否进行了I/O,需要打开set statistics on 和set statistics on.
- 老K漫谈区块链的共识(1)——免信任的共识机制
老k,柏链道捷CTO.清华阿尔山区块链研究中心高级工程师,超过17年的系统软件开发经验,在操作系统.编译器.虚拟机和符号执行方面都有实战经验.主持开发多个开眼项目,目前主要从事区块链底层系统开发工作. ...