day03-文件操作

1、对文件操作流程

  • 打开文件,得到文件句柄赋值给一个变量
  • 通过文件句柄,对文件进行操作
  • 关闭文件

格式:

#获取文件句柄

f = open("yesterday","r",encoding="utf-8")

#读取数据

data = f.read()

#打印读取的文件

print(data)

#关闭文件

f.close()

2、read、readline、readlines对比

f.read()会读取文件的所有内容,光标也会移动到最后位置

f.readline()会读取文件的第一行,光标会移动到第一行最后位置

f.readlines()以列表的形式,显示整个文档,每行作为一个元素。光标也会移到最后

3、r读模式,仅仅只能读,读全部

1 #data = open("yesterday").read()
2 f = open("yesterday",‘r‘)  #文件句柄,包含文件的文件名,字符集,大小,在硬盘上的位置
3 data = f.read() #文件的读取是从第一行开始,会读取整个文件
4 data2= f.read()  #再次读取时,是接着上次的读取结束位置
5 print(data)
6 print("----------------------------------")
7 print(data2)   #此时没有读出内容
8 f.close()

#读取前五行

1 f = open("yesterday",‘r‘)
2 for i in range(5):
3     print(f.readline())  #循环打印,比较占内存,效率低,因为readlines是读取整个文件
4 f.close()

#不打印第10行,readlines是以列表的形式,效率很低

1 f = open("yesterday",‘r‘)
2 for index,line in enumerate(f.readlines()):
3     if index ==9:
4         print("-----------分割线------------")
5         continue
6     else:
7         print(line.strip())
8 f.close()

#循环打印,逐行,内存中实时读取一行。效率最高

1 f = open("yesterday",‘r‘)
2 for line in f:
3     print(line)
4 f.close()

4、count计数器

#不打印第十行,通过count计数器

1 f = open("yesterday",‘r‘)
2 count =0
3 for line in f:
4     if count==9:
5         print("-------------分割线-----------")
6         count +=1
7         continue
8     print(line)
9     count +=1

5、tell统计字符数

1 f = open("yesterday",‘r‘)
2 print(f.tell())    #句柄指针的位置0
3 print(f.readline())  #读一行
4 print(f.tell())     #tell是按照字符计数

6、seek光标移动

1 f = open("yesterday",‘r‘)
2 print(f.tell())    #当前句柄指针的位置0
3 print(f.read(5))    #只读取五个字符
4 print(f.tell())     #tell是按照字符计数
5 f.seek(0)         #回到初始位置
6 print(f.tell())    #打印字符数
1 f.seek(2)
2 print(f.tell())    #把光标移回到第二个字符位置
3 print(f.seekable()) #判断是否能移动光标
4
5 print(f.encoding)  #查看文件的字符集
6
7 print(f.fileno()) #返回文件句柄在内存中的编号
8 print(f.readable()) #判断文件是否可读9 print(f.writable()) #判断文件是否可写

7、flush将内存数据写到硬盘

1 print(f.flush()) #将对文件的修改,从内存写入到硬盘(默认情况是缓存满了,再写入到硬盘)

8、打印进度条效果

1 #进度条效果
2 import sys,time
3 for i in range(50):
4     sys.stdout.write("#")
5     sys.stdout.flush()
6     time.sleep(0.1)

9、truncate截断字符

1 f = open("yesterday2",‘a‘)
2 f.seek(5)
3 f.truncate(6) #从头开始截断6个字符,即使移动光标也没有影响
4 f.close()

10、replace文件的修改

1 #文件的修改
2 f = open("yesterday",‘r‘)
3 f_new = open("yesterday.bak",‘w‘)
4 for line in f:  #f文件变成了迭代器
5     if "肆意的快乐等我享受" in line:
6         line = line.replace("肆意的快乐等我享受","肆意的快乐等Alex享受")
7     f_new.write(line)      f.close()
      f_new.close()

11、实现简单的shell sed替换功能

 1 import sys
 2 f = open("yesterday",‘r‘)
 3 f_new = open("yesterday.bak",‘w‘)
 4 find_str = sys.argv[1]
 5 replace_str = sys.argv[2]
 6 for line in f:  #f文件变成了迭代器
 7     if find_str in line:
 8         line = line.replace(find_str,replace_str)
 9     f_new.write(line)
10 f.close()
11 f_new.close()

12、w写模式,会将原有文件内容覆盖

1 #写模式,仅仅只能写
2 f = open("yesterday2",‘w‘) #会将原有文件覆盖
3 f.write("我爱北京天安门,\n") #文件的写入是从第一行开始
4 f.write("天安门上太阳升")  #再次写入时,是追加在上次内容后面的
5 f.close()

13、a追加写模式,在原有内容后面追加

1 #追加写模式,仅仅只能写,不能读
2 f = open("yesterday2",‘a‘)
3 f.write("\n我爱北京天安门.............,\n") #文件的写入是从第一行开始
4 f.write("天安门上太阳升.............")  #再次写入时,是追加在上次内容后面的
5 print(f.read())     #会报错
6 f.close()

13、r+读写模式

1 #顺序读,但是写是在文件内容最后追加
2 f = open("yesterday2",‘r+‘)#文件句柄,读写

14、w+写读模式

1 #先进行写,将原有内容覆盖,若继续写,则进行追加
2 f = open("yesterday2",‘w+‘) #文件句柄,写读

15、a+追加写模式

1 #追加写,还是不能读,只是不会报错
2 f = open("yesterday2",‘a+‘) #
3 f.write("\n我爱北京天安门.............,\n") #文件的写入是从第一行开始
4 f.write("天安门上太阳升.............")  #再次写入时,是追加在上次内容后面的
5 print(f.read())     #没有显示,但不会报错
6 f.close()

16、wb以二进制编码写

1 f = open("yesterday2",‘wb‘) #文件句柄,二进制文件
2 f.write("hello binary\n".encode()) #默认将二进制编码模式转换成utf-8
3 f.close()

17、with语句

为了避免打开文件后忘记关闭,可以通过管理上下文,即:

1 with open("yesterday2",‘r‘) as f:
2     for line in f:
3         print(line)

在Python 2.7 后,with又支持同时对多个文件的上下文进行管理,即:

1 with open("yesterday2",‘r‘) as f1,open("yesterday.bak",‘r‘) as f2:
2     for line in f1:
3         print(line)
4     for line in f2:
5         print(line)

格式清晰,使用 \ 换行

1 with open("yesterday2",‘r‘) as f1,2         open("yesterday.bak",‘r‘) as f2:
3     for line in f1:
4         print(line)
5     for line in f2:
6         print(line)

当with代码块执行完毕时,内部会自动关闭并释放文件资源。

时间: 2024-08-10 17:19:14

day03-文件操作的相关文章

python学习笔记-day03 (函数和文件操作)

函数(代码块,按功能划分(也可按其他方式划分)) 内置函数第三方函数自定义函数 内置函数:help()dir()type()reload()id() vars()  # 获取脚本中的变量,当前模块的所有变量    {'__name__': '__main__',  #被执行的脚本,__name__ 的值为__main__    '__builtins__': <module '__builtin__' (built-in)>,     '__file__': '/PYthon/test/tes

Python 文件操作

操作文件时,一般需要经历如下步骤: 打开文件 操作文件 一.打开文件 文件句柄 = open('文件路径', '模式') 打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文件句柄对该文件操作. 打开文件的模式有: r,只读模式(默认). w,只写模式.[不可读:不存在则创建:存在则删除内容:] a,追加模式.[可读: 不存在则创建:存在则只追加内容:] "+" 表示可以同时读写某个文件 r+,可读写文件.[可读:可写:可追加] w+,写读 a+,

python基础:python循环、三元运算、字典、文件操作

目录: python循环 三元运算 字符串 字典 文件操作基础 一.python编程 在面向过程式编程语言的执行流程中包含: 顺序执行 选择执行 循环执行 if是条件判断语句:if的执行流程属于选择执行:if语句有三种格式,如下: 在多分支的if表达式中,即使多个条件同时为真,也只会执行一个,首先测试为真: 选择执行 单分支的if语句 if CONDITION: 条件为真分支 双分支的if语句 if CONDITION 条件为真分支 else 条件不满足时分支 多分支的if语句 if CONDI

python文件操作

文件操作:os.mknod("test.txt")        创建空文件fp = open("test.txt",w)     直接打开一个文件,如果文件不存在则创建文件 关于open 模式: w     以写方式打开,a     以追加模式打开 (从 EOF 开始, 必要时创建新文件)r+     以读写模式打开w+     以读写模式打开 (参见 w )a+     以读写模式打开 (参见 a )rb     以二进制读模式打开wb     以二进制写模式打

Python基础(六) 基础文件操作

今天学习python下对文件的基础操作,主要从open函数.File对象的属性.文件定位.简单操作.举例说明几个步骤开始学习,下面开始进入今天的主题: 一.open函数介绍 open函数主要是打开一个文件,创建一个file对象,相关的方法可以调用它进行读写 . 语法格式如下: 1 2 3 file object = open(文件名,打开文件的模式) file object  = with open (文件名,打开文件的模式) as 变量名 两种语法格式的不同在于下面这种方法不用输入f.clos

小何讲Linux: 基本文件操作和实例

文件操作的基本概念参见博客: 小何讲Linux: 底层文件I/O操作 1.  函数说明 open()函数:是用于打开或创建文件,在打开或创建文件时可以指定文件的属性及用户的权限等各种参数. 所谓打开文件实质上是在进程与文件之间建立起一种连接,而"文件描述符"唯一地标识着这样一个连接 close()函数:是用于关闭一个被打开的文件.当一个进程终止时,所有被它打开的文件都由内核自动关闭,很多程序都使用这一功能而不显示地关闭一个文件. read()函数:是用于将从指定的文件描述符中读出的数据

C语言中的文件操作---重定向操作文件

先说个题外话,文件操作以及字符串与字符深入处理(就是那些什么puts(), getchar()什么的)是本人深入认识C++最后的两座大山.而今天先把重定向文件操作解决掉. 输入输出重定向恐怕是文件I/O操作中最简单的方法了,具体用法是现在main函数的开头加入两条语句,例如: freopen("D:\\input.txt", "r", stdin); freopen("D:\\output.txt", "w", stdout)

文件操作

1.C文件操作 2.c++文件操作 3.MFC文件操作:CFile是MFC的文件操作基本类,它直接支持无缓冲的二进制磁盘I/O操作,并通过其派生类支持文本文件.内存文件和socket文件. Visual C++处理的文件通常分为两种: 文本文件:只可被任意文本编辑器读取ASCII文本. 二进制文件:指对包含任意格式或无格式数据的文件的统称. 1.定义文件变量 定义文件变量格式:CStdioFile 文件变量: 例如,定义一个名称为f1的文件变量,语句如下:CStdioFile f1; 2.打开指

Windows DIB文件操作详解-4.使用DIB Section

前面讲了为了提高DIB的显示性能和效率,我们将DIB转换成DDB,但是这又遇到一个问题,如果我想操作DIB的数据的话,显然是不能使用DDB:一是因为DIB转DDB时发生了颜色转换,再就是DDB无法直接提取指定像素点的数据.那么我们怎么办呢,Windows使用一种折中的方式来达到这一目标(既提高了显示效率和性能,又可以直接操作像素点). 1.DIB Section存储和显示 Windows使用DIB块(DIB Section)来存储DIB数据,其内存结构示意图如下 其实,和我们自己读入DIB数据到

C/C++文件操作

1 基于C的文件操作 在ANSI C中,对文件的操作分为两种方式,即流式文件操作和I/O文件操作 2 一.流式文件操作 3 4 1.fopen() 5 FILE *fopen(const char *filename,const char *mode) 6 "r" 以只读方式打开文件 7 "w" 以只写方式打开文件 8 "a" 以追加方式打开文件 9 "r+" 以读/写方式打开文件,如无文件出错 10 "w+&quo