Python学习,第七课 - 文件操作
Python中对文件的相关操作详解
文件的操作在今后的Python开发中也是使用非常频繁的。
先说下对文件操作的流程
- 打开文件,得到文件的一个句柄,赋值给一个变量
- 然后通过句柄对文件进行操作(内容的增、删、改、查)
- 最后要关闭文件(有打开就要有关闭,否则文件会一直被暂用,直到程序运行结束。)
文件的基本操作
#按照上面所说的流程
f = open('demo.txt')#1.打开文件,句柄赋值给f
data = f.read()#2.对文件操作,读取文件内容
print(data)#打印文件
f.close()#3.关闭文件 #按照上面的流程,就完成了对文件的基本操作
打开文件模式
前面我们用打开文件,并没有地方选择打开的模式,其实默认就是使用了“只读模式”(r),在只读模式下我们只能读取文件内容,而不能对文件进行写入,追加等操作。
那如果想要写入怎么办,这里就要用到打开模式了。
打开文件是模式有如下:
- r,只读模式(默认)
- w,只写模式。(不可读,不存在文件时则创建,存在时则删除原有内容写入新内容。)
- a,追加模式。(可读,不存在文件时则创建,存在时则在原有内容上追加新内容。)
那么如何使用呢?其实很简单,下面写一个例子:
f = open('demo.txt','w')
f.write('test')
f.close()
#我们只需要在open的时候加上‘w’,就可以对文件进行写入操作了
如果想同时读取又可以写入怎么办?打开模式中有个‘"+"表示可以同时读写文件
- r+,可读写文件。(可读,可写,可追加)
- w+,写读
- a+,和a是一样的
还有一个“U”表示在读取时,可以将 \r\n自动转换成 \n
- rU
- r+U
"b"表示处理二进制文件,如果我们打开的文件不是文本,而且其他类型的文件就会用到这个模式
(使用场景:FTP发送上传的文件,linux中可以忽略,windows处理二进制文件时需标注)
- rb
- wb
- ab
打开文件编码
前面我们都没有使用到打开编码,其实默认都是 “gbk”
如果我们文件是utf-8编码的格式,且内容中存在中文,则读取的时候不会报错可以正常读取,
如果文件是utf-8编码格式的,内容中添加了中文,这个时候我们默认编码打卡就会报错,如下:
UnicodeDecodeError: 'gbk' codec can't decode byte 0xac in position 5: illegal multibyte sequence
这个时候后我们就要用到 encoding 对打开文件编码格式的修改:
f = open('demo.txt','r+', encoding='utf-8')
#加上encoding='utf-8'就不会出现报错,或者中文乱码了
大文件操作
前面我们读取文件内容,都是一次性读取全部内容,这样操作如果文件小还行,如果文件特别大,内容特别多,比如1G、10G等,则会让我们的电脑卡死,甚至内存溢出。
针对大文件的操作,我们其实可以每次只读一行,读完一行在内存中就删除
f = open('demo.txt','r+', encoding='utf-8')
#只要使用这种循环,读一条,删一条,内存中只保存一行数据
for line in f:
print(line)
f.close()
#此方法针对大文件操作效果显著
文件修改
上面我们用追加模式打开,然后写入文件就可以把追加的内容写入到文件中了。
如果要修改和删除,是不是用读写模式,把内容读出来,修改或删除内容,然后在从新写入到文件中,就可以实现删除和修改了。
但是,我们刚刚提到了大文件,假设20G的文件,你不可能全部读出来,在修改或删除相应内容之后,在重新写入文件,你的程序直接卡死了。那怎么办呢?
其实还是用到上面大文件操作的方式,我们一条一条读,然后一条一条写
#思路就是一行一行读出源文件内容,在一行一行写入新的文件中
f = open('demo.txt', 'r+', encoding='utf-8')#原文件
f2 = open('demo2.txt', 'a', encoding='utf-8')#修改后保存的新文件 for line in f:
#判断如果行中有出现'zhangsan'则修改成'lisi'
if 'zhangsan' in line:
line = line.replace('zhangsan', 'lisi')
#判断如果行中有出现'wangwu'则跳过,既这行不添加到新文件,相当于删除了这行
elif 'wangwu' in line:
continue
f2.write(line)#最后修改过的内容一行一行写入到新的文件中
print(line) f.close()
f2.close()
with 语句
前面我们说了,文件打开就要关闭。但是我们经常忘记关闭,怎么办呢?
Python提供了一个 with语句,使用方式:
#使用with语句,当with代码块执行完毕时,内部会自动关闭并释放文件资源。
with open('demo.txt', 'r', encoding='utf-8') as f:
pass #在Python2.7以后,with还同时支持操作多个文件
with open('demo.txt', 'r', encoding='utf-8') as f, open('demo2.txt', 'r', encoding='utf-8') as f2:
pass
关于Python中的文件操作常用的方法就写这么多,还有一些如
tell
seek
seekable
...
等等之类的方法,在大家实际使用的时候在具体了解吧。
Python学习,第七课 - 文件操作的更多相关文章
- Python学习笔记七:文件操作
文件操作 对照一个word文件的操作方式,来体会文件操作的内容 打开文件:f=open(“file”),提示编码错误,windows默认是GBK f=open(“file”,encoding=”utf ...
- Python学习第七课
Python学习第七课 'Alex' "Alex"print('hello'*5) #重复输出字符串 print('hellowold'[2:]) #类似于切片操作:会取出 llo ...
- python学习 day07打卡 文件操作
本节主要内容: 初识文件操作 只读(r,rb) 只读(w,wb) 追加(a,ab) r+读写 w+写读 a+追加写读 其他操作方法 文件的修改以及另一种打开文件句柄的方法 一. 初识文件操作 使用py ...
- Python基础(七)-文件操作
一.文件处理流程 1.打开文件,得到文件句柄赋值给一个变量 2.通过句柄对文件进行操作 3.关闭文件 二.基本操作 f = open('zhuoge.txt') #打开文件 first_line = ...
- python学习笔记(十)、文件操作
在前面我们了解到了没得模块,其中有一个模块为fileinput,为文件操作模块,不知道小伙伴们是否还记得? 1 打开文件 要打开文件,可以使用fileinput中的fileinput.input函数进 ...
- Python学习—基础篇之文件操作
文件操作 文件操作也是编程中需要熟练掌握的技能,尤其是在后台接口编写和数据分析过程中,对各种类型的文件进行操作,获取文件信息或者对信息进行存储是十分重要的.本篇博客中将主要对常见的文本格式文件和Exc ...
- Python学习笔记八:文件操作(续),文件编码与解码,函数,递归,函数式编程介绍,高阶函数
文件操作(续) 获得文件句柄位置,f.tell(),从0开始,按字符数计数 f.read(5),读取5个字符 返回文件句柄到某位置,f.seek(0) 文件在编辑过程中改变编码,f.detech() ...
- Python学习之路4 - 文件操作&编码转换
文件操作 文件操作大概分三步: 把文件打开. 操作文件. 把文件关上. 打开文件 打开文件用open()函数,打开成功后返回一个资源,具体语法如下. open(要打开的文件,打开方式,打开文件的格式, ...
- Python学习(五) —— 文件操作
一.文件操作 1.文件操作:数据持久化的一种 步骤:找到文件,打开文件,操作:读.写.追写,关闭文件 打开文件:f = open(文件路径,操作模式,编码方式),f:文件句柄.文件 ...
随机推荐
- 浅解 go 语言的 interface(许的博客)
我写了一个 go interface 相关的代码转换为 C 代码的样例.也许有助于大家理解 go 的 interface.不过请注意一点,这里没有完整解析 go 语言 interface 的所有细节. ...
- C++中 =default 和 =delete 使用
编译器默认为一个类生成的默认函数 默认构造函数 默认析构函数 默认拷贝构造函数 默认赋值函数 移动构造函数 移动拷贝函数 class DataOnly { public: DataOnly () // ...
- Perl 的内置变量$|
$|是perl的内置变量,默认情况下是0,如果设置为非0的话,表示当前的输出不经过缓存立刻输出.相当于c语言的fflush()函数,立即刷新缓冲区. 比如你print或者write一个文件,实际是需要 ...
- javaweb-实现不同用户登录后跳转到不同界面
今天下午,实现了公文流转系统的一小部分——登录界面验证不同用户跳转到不同界面 Dao package com.office.Dao; import java.sql.Connection; impor ...
- windows系统下的maven项目放到linux系统中运行时报org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnection这种异常的解决办法
这个错误的解决办法其实很简单你把连接mysql数据库的那个jar包换成linux版本的就行了: linux版本的连接mysql数据库的jar包链接:http://files.cnblogs.com/f ...
- 从零开始のcocos2dx生活(五)ActionEase
文章目录 sineEaseIn sineEaseOut sineEaseInOut expoEaseIn expoEaseOut expoEaseInOut easeIn easeOut easeIn ...
- $vjudge\ CSP-S$专题专练题解
照例先放个链接$QwQ$ $A$ $QwQ$之前写过题解辣. 重新说下趴,就给横坐标纵坐标也开点,然后每个点连向对应横纵坐标边权为$0$,相邻横坐标点之间连边,相邻纵坐标点之间连边,跑个最短路就完事$ ...
- 快速傅里叶变换与快速数论变换瞎学笔记$QwQ$
$umm$先预警下想入门$FFT$就不要康我滴学习笔记了,,, 就,我学习笔记基本上是我大概$get$之后通过写$blog$加强理解加深记忆这样儿的,有些姿势点我可能会直接$skip$什么的,所以对除 ...
- $Noip2018/Luogu5021$ 赛道修建 二分+树形
$Luogu$ $Sol$ 一直以为是每个点只能经过一次没想到居然是每条边只能经过一次$....$ 首先其实这题$55$分的部分分真的很好写啊,分别是链,数的直径和菊花图,这里就不详细说了. 使得修建 ...
- 还看不懂同事代码?快来补一波 Java 7 语法特性
前言 Java 平台自出现到目前为止,已经 20 多个年头了,这 20 多年间 Java 也一直作为最流行的程序设计语言之一,不断面临着其他新兴编程语言的挑战与冲击.Java 语言是一种静态强类型语言 ...