文件操作:
操作文件实际是4步骤
1、描述文件是哪个 2、打开文件 3、操作文件 4、关闭文件

1、打开文件使用open方法,代码举例:

data=open("wait_you",encoding="utf-8").read()
#这样不规范,打开文件后读取了全部行,不是把读出的行存成对象
#1、没有关闭文件
#2、应该存成一个文件对象
f=open("wait_you",encoding="utf-8")
#变量f就叫文件句柄也叫文件对象,属性有:文件名,字符集,文件大小,文件在硬盘上的起始位置。

文件打开模式:

#文件打开方式
f=open("wait_you",mode="r",encoding="utf-8")#这个实际开发中用的最多,文件按照只读方式打开,可读不可写,一般读取行就写 for line in f:这样的循环读取就可以了,效率最高
f=open("wait_you",mode="w",encoding="utf-8")#这个实际开发中用的最多,文件按照只写方式打开,可写不可读,一般修改文件配合上一种打开方式一起使用。
f=open("wait_you",mode="r+",encoding="utf-8") #这个是有实际开发意义的,模式为r+ 读写 可读可写,但实际上是读在开头,写在末尾,也就是追加readline、seek方法无法影响写的位置
f=open("wait_you",mode="w+",encoding="utf-8") #这个实际用的并不多,模式为w+ 写读 可写可读,但readline、seek方法无法影响写的位置
f=open("wait_you",mode="a+",encoding="utf-8") #这个实际用的也不多,模式为a+ 追加读,可读可写
f=open("wait_you",mode="rb") #二进制文件的读取模式,没有encoding属性了。用途:网络传输只能用进制,打开音频视频等等文件,也只能用二进制模式打开
f=open("wait_you",mode="wb") #二进制文件的写入模式,没有encoding属性了。用途:网络传输只能用进制,打开音频视频等等文件,也只能用二进制模式打开 f=open("wait_you",mode="wb")
f.write("hello world".encode("utf-8")) #当前编码要写在这里,不然会用当前默认的编码。
f.close()
#这里的二进制不是指无法人无法读,而是底层直接可以使用的二进制,然后,人在读文件,一般软件都有二进制编码的支持,所以还是可读的

2、操作文件

文件对象提供的各种方法:

#文件对象有各种方法
data = f.read() #读取全部行的方法read
data2=f.read() #data、data2都读取全部行,理论上两个变量所存内容一致。 #实际上 data有内容,data2没有内容,原因是:
#文件读取,python打开文件后,会维护一个文件行级的类似指针的标记,data2之所以没有数据,就是因为,data读完数据后,标记放在文件最后,所以data2再读读就读不出了,后续没有行了 #readline() 读取一行
#readlines() 读取每一行,存成一个list #最高效的逐行读取
f=open("wait_you",mode="r",encoding="utf-8") #高效的逐行读,这是最快的,用的迭代器
for line in f:
print(line) f.tell() #指针位置,按照字符记录
f.read(5) #可以指定读取5个位置
f.seek(0)#回到文件开头,也可以回到其他位置(tell方法得出的值)
f.encoding #获取当前打开文件的文件编码。
f.name #返回文件名
f.isatty()#返回文件是否为一个设备文件,底层交互用。True False
f.seekable() #返回文件是否可以移动光标位置,设备文件都不能移动的,True False
f.readable() #返回文件是否可以读取,True False
f.writable() #返回文件是否可以写入,True False
f.flush()#重要,刷盘,写入到缓存就算成功了,啥时候写入磁盘,依赖操作系统,或python调度,但flush 就强制刷入磁盘。
f.truncate() #重要,截断,不写参数就清空文件,参数是数字,也就是tell返回的文件位置数字,从那个位置开始往后的都干掉了,seek与truncate无关,都是从头往后数多少个位置

3、关闭文件

f.close() #关闭文件,非常重要,对文件操作完成,所有打开过的文件,都要分别执行close方法,不然内存容易崩掉!!!!

4、修改文件

#由于磁盘结构和读写方式导致,只能有一下两种方式进行修改文件内容
#1、文件全部读入内存,进行修改,再回写到文件
#2、逐行读文件,写新文件
#遇到需要修改的行,就修改,然后改后写入新文件。
o_file = open("wait_you",mode="r",encoding="utf-8")
n_file = open("wait_you_1",mode="w",encoding="utf_8")
for o_line in o_file:
if "柠檬草" in o_line:
o_line=o_line.replace("柠檬草","王玥大哥") #replace方法是字符串对象的方法,用于替换,第二个参数,替换第一个参数,第三个参数是个数字,描述最多替换几次
n_file.write(o_line)
o_file.close()
n_file.close()

5、with用法:

#with用法:
#python2.7以后的版本,出现了with关键字,作用是避免打开文件后忘记close的情况,
#with会在使用文件后,就自动调用close方法关闭这个文件:
with open("wait_you",mode='r',encoding='utf-8') as f:
for line in f:
print(line)
#以上代码高效的打印了每行,并且会自动close打开的文件,很好 #with也支持打开多个文件:
#为了可读性,严格遵循python的开发规范(官方),每行不超过80个字符
with open("wait_you",mode='r',encoding='utf-8') as f , \
open("hello_world",mode='r',encoding="utf-8") as u :
for line_1 in f:
print(line_1)
for line_2 in u:
print(line_2)

6、模拟进度条??? 深刻体会flush方法的意义

import sys,time
for i in range(50):
sys.stdout.write(">>") #sys.stdout是对应屏幕的标准输出
sys.stdout.flush() #写这行执行,和不写这行执行,差别还挺大的。
time.sleep(0.3)
#写了flush方法,屏幕会显出每一个进度“>>”的输出
#不写flush方法,等一会才输出,而且一次输出了好多个:
#原理是python认为写入操作系统的文件操作接口就完成了,后续由操作系统具体调度何时写入磁盘,写入磁盘的过程,可以是以下情况:
#1、缓存生命周期到了,写入磁盘。
#2、接受到写入磁盘指令,写入磁盘,例如:python的flush()方法
#3、缓存空间存满了,写入磁盘。
#4、使用缓存的程序结束了,写入磁盘(待考证,做实验的层面观察是这样的。)

python3.x Day3 文件操作的更多相关文章

  1. Python之旅Day3 文件操作 函数(递归|匿名|嵌套|高阶)函数式编程 内置方法

    知识回顾 常见五大数据类型分类小结:数字.字符串.列表.元组.字典 按存值个数区分:容器类型(列表.字典.元组) 标量原子(数字.字符串) 按是否可变区分:可变(列表.字典) 不可变(数字.字符串.元 ...

  2. Day3 文件操作和函数

    一 文件操作 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 1.1打开文件读取内容 print(open("sounds","r", ...

  3. Python3中IO文件操作的常见用法

    首先创建一个文件操作对象: f = open(file, mode, encoding) file指定文件的路径,可以是绝对路径,也可以是相对路径 文件的常见mode: mode = “r”   # ...

  4. day3 文件操作

    文件操作是在内存中进行操作的,因为文件是存储在内存中的. open函数,该函数用于文件处理: 操作文件时,一般需要经历如下步骤: (1)打开文件: (2)操作文件 一.打开文件 文件句柄 = open ...

  5. python3的一些文件操作的脚手架

    用python把原来的脚本重构了一下,其中写了文件操作的一些函数,如下: import os import shutil import hashlib import stat #查找文件夹中的某个文件 ...

  6. python3.x Day3 文件编码

    文件编码: 知识点不多,但及其重要,python2和python3处理机制还有不同点,需要注意. 首先: 编码.数据类型,完全不同的概念. 文件编码:可以遵循开发环境.可以自行设定. 变量值编码:py ...

  7. Python3之json文件操作

    json函数 使用json函数之前,首先需要导入json模块,import json 1).json.dumps()函数 该函数是将 Python 对象编码成 JSON 字符串,例如: import ...

  8. python从入门到大神---4、python3文件操作最最最最简单实例

    python从入门到大神---4.python3文件操作最最最最简单实例 一.总结 一句话总结: python文件操作真的很简单,直接在代码中调用文件操作的函数比如open().read(),无需引包 ...

  9. Python基础:Python函数、文件操作、递归

    函数参数 函数参数包括位置参数,关键字参数,动态参数(*args, **args)三种. 传参的过程是形式参数的赋值. *args传入的参数是元组形式,**args传入的参数是字典形式. 示例代码如下 ...

随机推荐

  1. lucene .doc文件格式解析——见图

    摘自:http://forfuture1978.iteye.com/blog/546841 4.2.2. 文档号及词频(frq)信息 文档号及词频文件里面保存的是倒排表,是以跳跃表形式存在的. 此文件 ...

  2. RDA 工模

    1.工模GUI如下图: 注意两个API接口,_APP_Update_Layer()/UpdateNodeFunctionContent() 这两个接口一个是刷新ListView,另一个刷新ListVi ...

  3. 1998 NOIP 拼数 string 和sort的新理解

    题目:https://www.luogu.org/problemnew/show/P1012 今天真是长了见识.这道题做了十几分钟,用模拟愣是调不出来.直到我看了题解——(当场去世)…… 题的意思是n ...

  4. spring-boot-configuration-processor的作用

    spring默认使用yml中的配置,但有时候要用传统的xml或properties配置,就需要使用spring-boot-configuration-processor了 先引入pom依赖 <d ...

  5. C++中虚析构函数的作用 (转载)

    转自:http://blog.csdn.net/starlee/article/details/619827 我们知道,用C++开发的时候,用来做基类的类的析构函数一般都是虚函数.可是,为什么要这样做 ...

  6. bzoj 1778: [Usaco2010 Hol]Dotp 驱逐猪猡【dp+高斯消元】

    算是比较经典的高斯消元应用了 设f[i]为i点答案,那么dp转移为f[u]=Σf[v]*(1-p/q)/d[v],意思是在u点爆炸可以从与u相连的v点转移过来 然后因为所有f都是未知数,高斯消元即可( ...

  7. [SDOI2010]外星千足虫(高斯消元)

    高斯消元裸题... 方法一:暴力,O(2^n)20分 方法二:直接Gauss,加点玄学技巧搞得好的话70分 方法三:使用bitset优化,复杂度:$O(\frac{n^3}{ω})$ 不会的同学看一下 ...

  8. [Qt及Qt Quick开发实战精解] 第1章 多文档编辑器

      这一章的例子是对<Qt Creator快速人门>基础应用篇各章节知识的综合应用, 也是一个规范的实例程序.之所以说其规范,是因为在这个程序中,我们对菜单什么时候可用/什么时候不可用.关 ...

  9. [BZOJ3223/Tyvj1729]文艺平衡树

    Description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列 其中需要提供以下操作: 翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 ...

  10. 贪心 CodeForces 137B Permutation

    题目传送门 /* 贪心:因为可以任意修改,所以答案是没有出现过的数字的个数 */ #include <cstdio> #include <algorithm> #include ...