【python】-- 文件操作
一、概述
我们工作中需要经常操作文件,下面就讲讲如何用Python操作文件
1、文件操作的流程:
- 打开文件,得到文件句柄赋值给一个变量
- 通过文件句柄,对文件进行操作
- 关闭文件
#获取文件句柄
f = open("yesterday","r",encoding="utf-8")
#读取数据
data = f.read()
#打印读取的文件
print(data)
#关闭文件
f.close()注: f 又叫文件句柄,它包含文件的文件名、文件的字符集、文件的大小、文件在硬盘上的起始位置
2、两次读取,第二次读取无内容解疑:
因为在文件中 ,维护一个类似文件指针的一个东西,这个文件指针类似于我们平时操作文件时的光标的东西,所以当第1次读文件时,文件指针已经指向最后一个位置,所以第2次再去读取的时候,是从最后一个位置开始读取的,所以读取的为空。
那怎么再重新读取数据呐?把光标移动到开始位即可
读取内容:
Somehow, it seems the love I knew was always the most destructive kind Yesterday when I was young
f = open("yesterday2","r",encoding="utf-8")
#第1次读取
data = f.read()
#第2次读取
data2 = f.read()
print(data)
print("----------------data2-----%s----"%(data2))
f.close()
#输出结果
Somehow, it seems the love I knew was always the most destructive kind
Yesterday when I was young
----------------data2---------
二、文件打开模式:
1、打开文件的模式有:
注:在读取文件之前最好导入os模块,判断一下文件是否存在,这是一个好习惯
filename = r"C:\Users\dell\PycharmProjects\untitled\home_work\week4\haproxy"
if os.path.exists(filename):
#再进行获取文件句柄操作
- r,英文:read,只读模式(默认)
- w,英文:write,只写模式(不可读,不存在则创建新文件,存在则删除内容)
- a,英文:append,追加模式(不可读,不存在则创建,存在则只追加内容)
f = open("yesterday","r",encoding="utf-8")
data = f.read()
print(date)
f.close()
#注:读操作,只能是只读,不能写和追加
#############################
f = open("yesterday2","w",encoding="utf-8")
f.write("qqqqqq")
f.close()
#注:写操作只能写和追加,不能读,而且写操作:
1、文件不存在,会重新创建一个文件,
2、文件存在,会覆盖之前的文件中的内容
#############################
f = open("yesterday2","a",encoding="utf-8")
f.read("aaaaaaaaaaaa")
f.close()
#注:追加模式不可读,不存在则创建,存在则只追加内容
2、"+"号表示同时读写某个文件:
- r+,可读写文件(可读;可写;可追加)
- w+,可写读文件(可读,可写,创建新文件)
- a+,可追加和读文件(可读,可追加,不存在则创建)
f = open("yesterday","r+",encoding="utf-8")
f.write("\n666666")
print(f.read())
f.close()
#输出
Somehow, it seems the love I knew was always the most destructive kind
Yesterday when I was young
666666
#########################################
写读的功能是:创建新文件->写入文本->设置指针为开始位置(seek(0))->读取到文件内容
f = open("yesterday2","w+",encoding="utf-8")
print(f.read())
f.write("qigao zui lang\n")
f.seek(0)
print(f.read())
print(f.tell())
f.write("qigao zui lang\n")
f.seek(0)
print(f.read())
#输出
#第1次读的内容
#第二次读取的内容
qigao zui lang
#指针位置
16
#第三次读取的内容
qigao zui lang
qigao zui lang
#######################################
追加和读:追加读在写入文件时,不会清空之前的内容,而是在之前的内容的追加一行,读取文件内容,需要重新设置指针
f = open("yesterday2","a+",encoding="utf-8")
print("--------data1-----")
print(f.read()) #没有设置指针
print("--------data2-----")
f.seek(0)
print(f.read()) #设置指针
f.write("qigao zui lang\n")
print("---------data3----")
print(f.read()) #写完以后没有设置指针
print("--------data4-----")
f.seek(0)
print(f.read()) #写完以后设置指针
f.close()
#输出
--------data1-----
--------data2-----
And only now I'm left alone to end the play, yeah
qigao zui lang
qigao zui lang
---------data3----
--------data4-----
And only now I'm left alone to end the play, yeah
qigao zui lang
qigao zui lang
qigao zui lang
注:
1、写读和追加功能,写入的行数不会收指针位置的控制,就是说不管指针在什么位置,依然写入的还是最后一行。
2、就是说当你,需要从开始读取文件内容的话,或者在某个位置之后的内容的话,需要设置指针位置,否则读取不到内容,代码如下:
f = open("yesterday2","w+",encoding="utf-8")
f.write("qigao zui lang\n")
print("-----不设指针位置-----")
print(f.read())
f.write("qigao zui lang\n")
print("-----设置指针位置-------")
f.seek(0)
print(f.read())
#输出
-----不设指针位置-----
-----设置指针位置-------
qigao zui lang
qigao zui lang
"U"表示在读取文件时,可以把\r\n自动转化为\n(与 r 或 r+ 模式同使用)
- rU
- r+U
3、"b"表示处理二进制文件
- rb 二进制读
- wb 二进制写
- ab 二进制追加
这种是以二进制操作的,也就是说不管是是读,写,追加,都必须是二进制文件,也就是字节,而不是字符,需要解码以后才会生成字符。一般情况下跨平台的文件,视频文件等需要二进制模式 操作
#rb(二进制读) #二进制读取
f = open("yesterday2","rb")
f_read = f.read()
print(f_read)
#解码
print(f_read.decode()) #输出
#没有解码,读出来的是二进制,也就是字节码
b'Somehow, it seems the love I knew was always the most destructive kind'
#解码后,是字符
Somehow, it seems the love I knew was always the most destructive kind ##################################### # wb(二进制写) f = open("yesterday2","wb")
in_str = "小高最帅" #这边写入文件,就需要编码,否则就会报错
in_str = in_str.encode() f.write(in_str)
f.close() #################################### # ab(二进制追加) f = open("yesterday2","ab")
in_str = "gaoge,shuai de yibi"
#这边需要先编码,才能追加到文件中
in_str = in_str.encode() f.write(in_str)
f.close()
注:普通打开模式和二进制打开模式,只是在python 3中,二进制打开模式才做了字符和字节的编码和解码;然而在python 2中,字节和字符没有做明显的区别,所以在python 2中,二进制模式读取文件时,不需要做编码和转码的操作
三、with、读取文件对比:
1、with:
为了避免打开文件后忘记关闭,可以通过管理上下文,即:
with open('log','r') as f:
pass
如果打开多个文件会导致一行代码过长,(python官方建议,一行代码不超过80个字符),所以打开多个文件建议以下写法:
#with open('log1') as obj1, open('log2') as obj2:
with open('log1') as obj1, \
open('log2') as obj2:
pass
2、读取文件对比:
readline()
读取一行文件
f = open("yesterday","r",encoding="utf-8")
print(f.readline())
f.close()
#输出
Somehow, it seems the love I knew was always the most destructive kind
readlines()
把文件中的每一行作为一个元素形成一个列表
f = open("yesterday2","r",encoding="utf-8")
print(f.readlines())
f.close()
#输出
['Somehow, it seems the love I knew was always the most destructive kind\n','Yesterday when I was young\n']
我们正常循环读取文件中的每一行,如下:
f = open("yesterday2","r",encoding="utf-8")
for line in f.readlines():
print(line.strip())
f.close()
#输出
Somehow, it seems the love I knew was always the most destructive kind
Yesterday when I was young
这种方法已经达到我们的目的了,可以顺利的读取每一行,但是,当我们遇到2G,20G,甚至200G的文件时,你这样读取会导致内存不够用,会使程序变的很慢,因为你的内存只有几个G,你把几十个G的数据放到内存,内存肯定是受不了的,所以这种方法只适合小文件,不适合大文件。我们于是就有下面这种方法,如下:
f = open("yesterday2",'r',encoding='utf-8')
#f文件变成迭代器
for line in f:
print(line.strip())
f.close()
#输出结果
Somehow, it seems the love I knew was always the most destructive kind
Yesterday when I was young
这种写法的好处在于,读取文件时,是一行一行的读取,而且,读取一行删除一行,内存中只保留一行
四、文件操作的内置方法:
file 对象使用 open 函数来创建,下表列出了 file 对象常用的函数:

【python】-- 文件操作的更多相关文章
- Python基础篇【第2篇】: Python文件操作
Python文件操作 在Python中一个文件,就是一个操作对象,通过不同属性即可对文件进行各种操作.Python中提供了许多的内置函数和方法能够对文件进行基本操作. Python对文件的操作概括来说 ...
- [Python学习笔记][第七章Python文件操作]
2016/1/30学习内容 第七章 Python文件操作 文本文件 文本文件存储的是常规字符串,通常每行以换行符'\n'结尾. 二进制文件 二进制文件把对象内容以字节串(bytes)进行存储,无法用笔 ...
- Python文件操作与函数目录
文件操作 python文件操作 函数 Python函数学习——初步认识 Python函数学习——作用域与嵌套函数 Python函数学习——匿名函数 python内置函数 Python函数学习——递归 ...
- 初学Python——文件操作第二篇
前言:为什么需要第二篇文件操作?因为第一篇的知识根本不足以支撑基本的需求.下面来一一分析. 一.Python文件操作的特点 首先来类比一下,作为高级编程语言的始祖,C语言如何对文件进行操作? 字符(串 ...
- 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基础-文件操作 一.文件操作 对文件操作的流程 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 打开文件时,需要指定文件路径和以何等方式打开文件, ...
- Python:文件操作技巧(File operation)(转)
Python:文件操作技巧(File operation) 读写文件 # ! /usr/bin/python # -*- coding: utf8 -*- spath = " D:/dow ...
- 小学生都能学会的python(文件操作)
小学生都能学会的python(文件操作) 1. open("文件路径", mode="模式", encoding="编码") 文件的路径: ...
随机推荐
- .Net普通三层->工厂模式->线程内唯一+单元工作模式->WebService分布式三层
在软件世界分层的思想无处不在 主要是为了提高软件系统的维护性,扩展性,复用性和解耦等 软件的三层构架是一种最基本的分层思想的体现 结构图大体如下: 如此一来,开发人员可以只关注其中一层,而无需关心下一 ...
- 关于批量插入数据之我见(100万级别的数据,mysql)
因前段时间去面试,问到怎样高效向数据库插入10万条记录,之前没处理过类似问题.也没看过相关资料,结果没答上来,今天就查了些资料.总结出三种方法: 測试数据库为mysql!!! 方法一: public ...
- MyEclipse导入Hibernate出现Path must include project and resource;/project name
如图,在MyEclipse 2014以下版本中都没遇见这个问题. 在导入Hibernate框架的时候,可以说真的随缘,运气不好,明明配置全都没问题,还是连续几次失败,这个时候除了烧高香拜拜,也只能靠百 ...
- Android 在同一个手机上安装多个同样的apk,便于调试
Android studio 在同一个手机上安装多个同样的apk 原文地址:http://yj.itrydo.com/posts/iKJryXL9zkfSGRTZk 先看效果: 1.在我使用ecsli ...
- Linux组件封装(五)一个生产者消费者问题示例
生产者消费者问题是计算机中一类重要的模型,主要描述的是:生产者往缓冲区中放入产品.消费者取走产品.生产者和消费者指的可以是线程也可以是进程. 生产者消费者问题的难点在于: 为了缓冲区数据的安全性,一次 ...
- Django的Form、CSRF、cookie和session
Django是一个大而全的web框架,为我们提供了很多实用的功能,本文主要介绍Form.CSRF.cookie和session 一.Form 在web页面中form表单是重要的组成部分,为了数据安全和 ...
- (十)Thymeleaf用法——Themeleaf内联
5. 内联 [[...]]是内联文本的表示格式,但需要使用th:inline属性(分为text,javascript,none)激活. 5.1 文本内联 <p th:inline=&quo ...
- 【Lucene】Apache Lucene全文检索引擎架构之入门实战1
Lucene是一套用于全文检索和搜寻的开源程式库,由Apache软件基金会支持和提供.Lucene提供了一个简单却强大的应用程式接口,能够做全文索引和搜寻.在Java开发环境里Lucene是一个成熟的 ...
- 微软认知服务:QnA Maker使用示例
简介 QnA Maker 从用户提供的内容(包括 FAQ URL.文档和编辑内容)中提取所有可能存在的问答对:利用易于使用的界面编辑.删除和添加问答对,然后将知识库作为 API 终结点进行发布:QnA ...
- svn解决冲突和commit
当使用svn出现 svn: E155015: 提交失败(细节如下):svn: E155015: 提交终止: “/home/test.file” 处于冲突状态 解决办法: svn resolved /h ...