Python----文件的IO操作
一、文件操作
r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。 |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。 |
w | 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
w+ | 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
打开文件
假设我们有一个file.txt文件,内容为:
abcdefg
jijklmn
opqtsr
uvwxyz
# Author:Tim Gu
data = open('file.txt',encoding="utf-8").read()
print(data)
输出:
abcdefg
jijklmn
opqtsr
uvwxyz
读文件:
# Author:Tim Gu
f = open('file.txt','r',encoding='utf-8')
data = f.read()
print(data)
>>>
abcdefg
jijklmn
opqtsr
uvwxyz
写文件:
f = open('file.txt2','w',encoding='utf-8') #文件句柄,使用w时事实上是创建了一个新文件,如果源文件存在,会覆盖
f.write("I will go home!")
f.write('\nByeBye!')
f.write('\nadfas')
追加文件:
f = open('file.txt2','a',encoding='utf-8') #文件句柄
f.write("See you,tomorrow!")
打开文件file.txt2
I will go home!
ByeBye!
adfasSee you,tomorrow! 以行读取文件:
# Author:Tim Gu
f = open('file.txt2','r',encoding='utf-8') #文件句柄
print(f.readline()) #读取一行
for i in range(2): #使用for循环读取2行
print(f.readline())
使用readline()读取的是文件的单行,readlines()会读取文件全部行,每行作为一个元素形成一个列表。readlines()因为会一下子把文件全部读取到内存,所以只适合读小文件。
下面示例读取文件,但不读取第10行:
# Author:Tim Gu
f = open('file3.txt','r',encoding='utf-8') #文件句柄
#print(f.readlines())
for index,line in enumerate(f.readlines()): #使用遍历读取文件
if index == 9:
print('------------------我是分割线-------------------')
continue
print(line.strip())
输出:
从前现在过去了再不来
红红落叶长埋尘土内
开始终结总是没变改
天边的你飘泊白云外
苦海翻起爱恨
在世间难逃避命运
相亲竟不可接近
或我应该相信是缘份
情人别后永远再不来(消散的情缘)
------------------我是分割线-------------------
鲜花虽会凋谢(只愿)
但会再开(为你)
一生所爱隐约(守候)
在白云外(期待)
苦海翻起爱恨
在世间难逃避命运
相亲竟不可接近
或我应该相信是缘份
苦海翻起爱恨
在世间难逃避命运
相亲竟不可接近
或我应该相信是缘份
处理大文件的方法:这行代码的效果和上面的一样,只是使用了迭代器,使得内存可以只保留一行
f = open('file3.txt','r',encoding='utf-8') #文件句柄
count = 0
for line in f: #一行行读取文件,内存中只保留一行。
if count == 9:
print('------------我是分割线---------------')
count += 1
continue
else:
print(line.strip())
count += 1
光标处理:seek()用法
# Author:Tim Gu
f = open('file3.txt','r',encoding='utf-8') #文件句柄
print(f.tell()) #读取光标坐在位置
print(f.readline()) #读取一行
print(f.readline()) #读取第二行
print(f.readline()) #读取第三行
print(f.tell()) #打印光标所在位置
f.seek(0) #使光标回到原点
print(f.tell()) #打印光标位置
>>>
0
从前现在过去了再不来 红红落叶长埋尘土内 开始终结总是没变改 90
flush()实时将数据写入磁盘
打印进度条的小方法:
# Author:Tim Gu
import sys,time
for i in range(20):
sys.stdout.write("#") #sys.stdout方法在同一行打印
sys.stdout.flush() #每打印一个#符号写入一次
time.sleep(0.3) #每打印一次隔0.3秒
>>>
####################
truncate() 截断文件,可以清空文件
# Author:Tim Gu
f = open('file.txt','a',encoding='utf-8')
f.truncate(10) #保留文件前10个字符,其余截断
文件的模式:r+读写模式:这段代码会先读取3行,然后再在文件最后写入"-------------------------------------"
# Author:Tim Gu
f = open('file.txt','r+',encoding='utf-8') #读写
print(f.readline())
print(f.readline())
print(f.readline())
f.write("----------------------------------------------")
print(f.readline())
文件的模式:w+ 写读模式:会创建新文件,此段代码会覆盖掉源文件
# Author:Tim Gu
f = open('file.txt','w+',encoding='utf-8') #写读
print(f.readline())
print(f.readline())
print(f.readline())
f.write("----------------------------------------------")
print(f.readline())
tell()和seek()联合使用:
# Author:Tim Gu
f = open('file.txt','w+',encoding='utf-8') #写读
f.write("-----------------------------1------------------------")
f.write("\n-----------------------------2------------------------")
f.write("\n-----------------------------3------------------------")
f.write("\n-----------------------------4------------------------")
print(f.tell()) #打印光标所在位置
f.seek(10) #使光标回到第十个字符的位置
print(f.readline()) #打印当前行
>>>
222
-------------------1------------------------
此时文件内容:
-----------------------------1------------------------
-----------------------------2------------------------
-----------------------------3------------------------
-----------------------------4------------------------should be at the begining of the second line
line.replace的用法,修改文件中的某一行内容:
# Author:Tim Gu
f = open('file3.txt','r',encoding='utf-8')
f_new = open('file3.bak','w',encoding='utf-8')
for line in f:
if '天边的你飘泊白云外' in line:
line = line.replace('天边的你飘泊白云外','aaaaaaaaa') #修改这一行字符串
f_new.write(line)
f.close()
f_new.close()
使用with打开文件:
with open('file.txt','r',encoding='utf-8') as f,\
open('file3.txt','r',encoding='utf-8') as f2:
for line in f:
print(line)
for line in f2:
print(line)
注:因实际开发过程中,打开文件很容易忘记关闭文件,造成内存不能释放,所以一般可以选择使用with open方法打开文件
python3的新特性:x
f = open('1.txt','x',encoding='utf-8') #如果文件存在则报错,不存在则创建文件并只写
文件之ab模式:
f = open('1.txt','ab') #使用ab写文件
f.write(bytes('顾卿',encoding='utf-8')) #因为有b,所以必须传字节类型,所以使用bytes把字符串转化为字节类型
f.close()
seek()和tell()的特性:
模式r+一般比较常用,相比较a+,r+可控制指针位置来写,而a+则永远只能在末尾写
f = open('1.txt','r+',encoding='utf-8') #打开模式是r+(无b),读取按照字符读取
data = f.read(1)
print(f.tell()) #tell当前指针所在的位置(字节)
f.seek(f.tell()) #调整当前指针的位置(字节)
f.write('') #当前位置开始覆盖
f.close()
flush()的作用:
f = open('1.txt','a',encoding='utf-8')
f.write('')
f.flush() #将缓存内容强制写进磁盘
input('asdfasd')
seekable():
是否可以移动指针
打开两个文件,将第一个文件的内容写进第二个文件:
with open('1.txt','r',encoding='utf-8') as f1,open('2.txt','w',encoding='utf-8') as f2:
times = 0
for line in f1:
times += 1
if times <= 10:
f2.write(line)
else:
break 读取第一个文件内容,修改后写入第二个文件:
with open('1.txt','r',encoding='utf-8') as f1,open('2.txt','w',encoding='utf-8') as f2:
times = 0
for line in f1:
new_str = line.replace('aaaaa','st')
f2.write(new_str)
Python----文件的IO操作的更多相关文章
- 人生苦短之Python文件的IO操作
在Python中也有涉及到文件的相关操作,从最简单的文件读取说起 文件读取 file = open('/Users/macbookpro/Desktop/使用教程.txt', 'r', encodin ...
- Atitit.跨语言 文件夹与文件的io操作集合 草案
Atitit.跨语言 文件夹与文件的io操作集合 草案 1. Jdk原生的太难用了..1 2. PS: apache commons-io包,FileUtils有相关的方法,IOUtils一般是拷 ...
- 提高生产力:文件和IO操作(ApacheCommonsIO-汉化分享)
复制.移动.删除.比较.监控.文件读写 等文件和IO操作是编程中比较常用的功能. 幸运的是,Apache Commons IO等开源组件已经帮我们实现了. 我们可以不用重复 ...
- python文件及目录操作
python文件及目录操作 读/写文件 新建/打开文件 写入 #举个例子,打开D:\test\data.txt #以写入模式打开文件 #如果test(上级目录)不存在则报错 #如果data.txt(文 ...
- python文件的基础操作
import os print(,'-')) print(os.getcwd()) print(,'-')) print(os.listdir()) print(,'-')) print(os.lis ...
- python中的IO操作
python中的基本IO操作: 1) 键盘输入函数:raw_input(string),不作处理的显示,与返回. input(string),可以接受一个python表达式作为返回,python内部得 ...
- [ Python ] 文件的读写操作
1. 文件读写操作 读写文件是最常见的 IO 操作, Python 内置了读写文件的函数.在磁盘上读写文件的功能是由操作系统提供的,所以读写文件是请求操作系统打开一个文件对象(通常称为文件描述符),然 ...
- [Python基础]006.IO操作
IO操作 输入输出 print raw_input input 文件 打开文件 关闭文件 读文件 写文件 文件指针 实例 输入输出 输入输出方法都是Python的内建函数,并且不需要导入任何的包就可以 ...
- Linux文件的IO操作 一
系统调用 系统调用: 操作系统提供给用户程序调用的一组“特殊”接口,用户程序可以通过这组“特殊”接口来获得操作系统内核提供的服务 为什么用户程序不能直接访问系统内核提供的服务 为了更好地保护内核空间, ...
- Python学习之-- IO 操作
阻塞IO / 非阻塞IO /IO多路复用 / 异步IO 说明:同步IO包含(阻塞IO / 非阻塞IO /IO多路复用),因为他们有个共同特性就是都需要内核态到用户态的一个等待. 基本概念解释,环境限定 ...
随机推荐
- .net中获取图像缩略图的函数GetThumbnailImage
关于.net中获取图像缩略图的函数GetThumbnailImage的一些认识. 在很多图像软件中,打开一幅图像的时候都会显示其缩略图,在看图软件中这样的需求更为常见.如何快速的获取缩略图的信息并提供 ...
- android 工程里缺少 R.java 文件原因和解决方法
作为新手,学习android 的时候难免要导入一些示例,目的为了更加了解android各种API用法,顺便也可以学习下别人代码的写法. 可是导入android源码后,基本都有错误,R.java也不会自 ...
- Qt在表格中加入控件
任务:使用QTableWidget动态生成表格,在每行的某两列中加入QComboBox下拉框控件和QPushButton按钮控件 有添加,删除,编辑功能,每行的按钮可以浏览文件夹并选择文件 1.新建一 ...
- sharepoint 使用命令行注册dll文件到gac的方法
使用命令行注册dll文件到gac的方法: gacutil.exe -i D:\SPFormLoginProject.dll 删除gac的dll方法: gacutil /u "SPFormLo ...
- Embedded Linux Primer----嵌入式Linux基础教程--导论
第一章 导论 在这一章里(将要学习到) 为什么是Linux 嵌入式Linux现状 开源和GPL(译者:通用公共许可证) 标准和有关团体 本章总结 放弃专有操作系统正在许多传统嵌入式操作系统公司引起一阵 ...
- jvm加载class原理
“委托机制”是指先委托父类装载器寻找目标类,只有在找不到的情况下才从自己的路径中查找并载入.这一点是从安全的方面考虑的,试想一下如果有人写了一个恶意的基础类(如java.lang.String)并加载 ...
- C#中转义字符
编程中很多细节问题我们都要十分的注意,要不一个小小的字母错误就能引起程序的无法运行. C#中转义字符分2中,一种是\,一种是@. @符号在C#中有两个作用作用1.在字符串的前面加@表示取消字符串中的转 ...
- NG2入门 - 根模块
根模块 app.module 建议大家先去学习angularjs官网的英雄教程后再进行后面的阅读,app.module.ts 就是ng2应用中的引导启动模块也称根模块 import { NgModul ...
- [CSS] 子元素垂直居中的两种方式
1. 多个子元素水平并排,IE10以下失效 display: flex; align-items: center; justify-content: center; 2.多个子元素竖直排列,这种方式会 ...
- SpringMVC 学习-上传文件分解器 CommonsMultipartResolver 类
Spring 组件 CommonsMultipartResolver 类的主要作用是配置文件上传的一些属性,也可以控制上传文件的大小. 在 springmvc-servlet.xml 配置文件中: & ...