03_文件操作

文件操作

操作文件时,一般需要经历如下步骤:

  • 打开文件
  • 操作文件
  • 关闭文件

1、打开文件

格式:文件句柄 = open(‘文件‘, ‘模式‘, encoding=‘字符编码‘)

打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文件句柄对该文件操作。

常规模式:

  • r - 只读模式(默认)
  • w - 只写模式,不可读;不存在则创建,存在则清空原文件内容
  • x  - 只写模式,不可读;如果文件存在,报错;如果文件不存在,创建并写内容
  • a  - 追加模式,可读;不存在则创建,存在只能追加内容

注:encoding - 指定文件操作字符编码类型,一般常用万国码‘utf-8‘

示例:r 模式(只读)

1 f = open("db", "r", encoding="utf-8")
2 data = f.read()    #读取文件内容
3 print(data)
4 f.close()    #关闭文件
5
6 # 输出结果
7 tom

示例:w 模式(只写,不可读;不存在则创建,存在则清空原文件内容)

 1 # 1.文件存在
 2 f = open("db", "w", encoding="utf-8")
 3 f.write("jarry")
 4 f.close()
 5
 6 f = open("db", "r", encoding="utf-8")
 7 data = f.read()
 8 print(data)
 9 f.close()
10
11 #输出结果:清空原内容tom,写入新内容jarry
12 jarry
13
14 # 2.文件不存在
15 f = open("db2", "w", encoding="utf-8")
16 f.write("tom")
17 f.close()
18
19 f = open("db2", "r", encoding="utf-8")
20 data = f.read()
21 print(data)
22 f.close()
23
24 #输出结果,在.py同目录内自动生成名为db2的文件
25 tom

示例:x 模式(只写模式,不可读;如果文件存在,报错;如果文件不存在,创建并写内容)

 1 # 1. 文件存在
 2 f = open("db", "x", encoding="utf-8")
 3 f.write("tom")
 4 f.close()
 5
 6 # 输出结果,报错
 7 FileExistsError: [Errno 17] File exists: ‘db‘
 8
 9 # 2. 文件不存在
10 f = open("db3", "x", encoding="utf-8")
11 f.write("tom")
12 f.close()
13
14 #执行结果:同目录下生成db3文件
15
16 f = open("db3", "r", encoding="utf-8")
17 data = f.read()
18 print(data)
19 f.close()
20
21 # 输出结果:db3内容
22 tom

示例:a 模式( 追加模式,可读;不存在则创建,存在只能追加内容)

 1 # 1. 文件存在
 2 f = open("db5", "a", encoding="utf-8")
 3 f.write("jarry \n")    #\n 写入文件内容自动换行
 4 f.close()
 5
 6 f = open("db3", "r", encoding="utf-8")
 7 data = f.read()
 8 print(data)
 9 f.close()
10
11 # 输出结果:
12 tom
13 jarry 

"b"表示以字节的方式操作

  • rb 或 r+b
  • wb 或 w+b
  • xb 或 x+b
  • ab 或 a+b

注:以b方式打开文件时,读取到的内容是字节类型,写入时也需要提供字节类型,且无需指定encoding字符编码

1 # 以字节方式指定字符编码,执行报错
2 f = open("db4", "r", encoding="utf-8")
3 data = f.read()
4 print(data,type(data))
5 f.close()
6
7 #执行报错结果
8 ValueError: binary mode doesn‘t take an encoding argument

示例:"b"表示以字节的方式操作

 1 # 1. 以字节形式wb模式写入数据,并输出写入结果
 2 f = open("db4", "wb")
 3 f.write(bytes(10))
 4 f.write(bytes("ab", encoding="utf-8"))    # 字符串指定编码格式,并转换成字节
 5 f.write(bytes("龙", encoding="utf-8"))    # 字符串指定编码格式,并转换成字节
 6 f.close()
 7
 8 f = open("db4", "rb")  #以字节形式打开文件,如果不加b以字符形式打开文件
 9 data = f.read()
10 print(data, type(data))  #查看结果及数据类型
11 print()
12 f.close()
13
14 # 输出结果
15 b‘\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00ab\xe9\xbe\x99‘ <class ‘bytes‘>  #bytes类型
16
17 # 2. 以字节形式ab模式写入数据,并输出写入结果
18 f = open("db4", "ab")
19 f.write(bytes("厚德", encoding="utf-8"))
20 f.close()
21
22 f = open("db4", "rb")
23 data = f.read()
24 print(data, type(data))
25 print()
26 f.close()
27
28 # 输出结果
29 b‘\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00a\xe9\xbe\x99\xe5\x8e\x9a\xe5\xbe\xb7‘ <class ‘bytes‘>
30
31 # 3. 以字节形式xb模式写入数据,并输出写入结果
32 f = open("db4", "xb")
33 f.write(bytes("载物", encoding="utf-8"))
34 f.close()
35
36 # 输出结果
37     f = open("db4", "xb")
38 FileExistsError: [Errno 17] File exists: ‘db4‘

"+"表示可以同时读写某个文件

  • r+, 读写【可读,可写】
  • w+,写读【可读,可写】
  • x+ ,写读【可读,可写】
  • a+, 写读【可读,可写】

示例:

 1 # r+模式
 2 f = open("db5", "r+", encoding="utf-8")
 3 f.write("testr")
 4 f.close()
 5
 6 f = open("db5", "r", encoding="utf-8")
 7 data = f.read()
 8 print(data, type(data))
 9 f.close()
10
11 # 输出结果
12 testr <class ‘str‘>
13
14
15 # w+模式
16 f = open("db5", "w+", encoding="utf-8")
17 f.write("testw")
18 f.close()
19
20 f = open("db5", "r", encoding="utf-8")
21 data = f.read()
22 print(data, type(data))
23 f.close()
24
25 # 输出结果,清空原文件内容
26 testw <class ‘str‘>
27
28
29 # a+模式
30 f = open("db5", "a+", encoding="utf-8")
31 f.write("testa")
32 f.close()
33
34 f = open("db5", "r", encoding="utf-8")
35 data = f.read()
36 print(data, type(data))
37 f.close()
38
39 #输出结果,追加内容
40 testwtesta <class ‘str‘>

打开文件操作小结:

  1. 非字节类型,一般指定字符编码为utf-8。
  2. 模式中有b,按字节形式操作;模式中无b,按字符形式操作。
  3. 字节形式输入字符,字符需要指定编码格式,并转换成字节。

2、操作文件

常用操作文件

fileno()   #文件描述符
flush()    #刷新文件内部缓冲区
isatty()   #判断文件是否是tty设备
read()    #读取数据,有b按字节;无b按字符
readable()  #是否可读
readline()  #仅读取一行数据
seek()     #指定文件中指针位置
seekable()  #指针是否可操作
tell()    #获取指针位置
truncate()  #截断数据,指针位置后的数据清空
writable()  #是否可写
write()   #写内容

示例

# db5文件内容
alex tom eric jarry
 
# 以utf-8格式,以r+读写模式打开db5文件
f = open("db5", "r+", encoding="utf-8")   
 
# readable(),查看文件是否可读
data1 = f.readable()
print("readable():", data1, type(data1))
# 输出结果
# readable(): True <class ‘bool‘>
# read(): ale tom eric jarry <class ‘str‘>
 
# read(),读取文件内容
data2 = f.read()
print("read():", data2, type(data2))
# 输出结果
# read(): ale tom eric jarry <class ‘str‘>
 
# fileno(),文件描述符
data3 = f.fileno()
print("fileno():", data3, type(data3))
# 输出结果
# fileno(): 3 <class ‘int‘>
 
# isatty(),判断文件是否为tty设备
data4 = f.isatty()
print("isatty():", data4, type(data4))
# 输出结果
# isatty(): False <class ‘bool‘>
 
# tell(),当前指针所在位置
data5 = f.tell()
print("tell():", data5, type(data5))
data2 = f.read()
print("read():", data2, type(data2))
data5 = f.tell()
print("tell():", data5, type(data5))
# 输出结果
# tell(): 0 <class ‘int‘>  #指针初始位置为0
# read(): alex tom eric jarry <class ‘str‘>  #读取所有数据
# tell(): 19 <class ‘int‘>  #指针位置到数据结尾
 
# seekable(),指针是否可操作
data6 = f.seekable()
print("seekable:", data6, type(data6))
# 输出结果
# seekable: True <class ‘bool‘>
 
# seek(),指定指针位置
data7 = f.seek(3)
print("seek:", data7, type(data7))
data5 = f.tell()
print("tell():", data5, type(data5))
# 输出结果
# seek: 3 <class ‘int‘>
# tell(): 3 <class ‘int‘>
 
# write(),写入数据,如果指定指针位置,写入数据时从指针位置开始向后覆盖
f.write("long")
# 输出结果,db5文件变化
# alelongm eric jarry
 
# writable(),文件是否可写入
data8 = f.writable()
print("writeable():", data8, type(data8))
# 输出结果
# writeable(): True <class ‘bool‘>

# truncate(),截取数据,指针位置后的数据清空
f.truncate(f.seek(3))
#close(),关闭文件
f.close()
# 输出结果,db5指针位3后数据全部清空
# ale

#close(),关闭文件
f.close()
 
 
 
# readline(),每次读取一行数据
f = open("db6", "w+", encoding="utf-8")
f.write("alex\n") #模拟多行数据环境
f.write("tom\n")
f.write("jarry\n")
f.write("eric\n")
f.close()
 
f = open("db6", "r+", encoding="utf-8")
data = f.readline() #每次读取一行
print("readline():", data, type(data))
data = f.readline()
print("readline():", data, type(data))
data = f.readline()
print("readline():", data, type(data))
f.close()
# 输出结果
# readline(): alex
#   <class ‘str‘>
# readline(): tom
#   <class ‘str‘>
# readline(): jarry
#   <class ‘str‘>
 
# flush(),刷新内部缓存数据到文件
f = open("db7", "w+", encoding="utf-8")
f.write("tom")
#如果不加入f.flush(),上面操作无法执行,缓存区数据不能写入文件,需要等待全部操作完成后执行
f.flush()
input("your name:")
f.close()

扩展1:for循环对象f = open(xxx)

f = open("db7", ‘r+‘, encoding="utf-8")
for line in f:
    print(line,type(line))
f.close()
# 输出结果
# alex
#  <class ‘str‘>
# tom
#  <class ‘str‘>
# jarry
#  <class ‘str‘>
# eric <class ‘str‘>

扩展2:同时打开两个文件

#示例格式
with open(‘db1‘) as f1, open("db2") as f2:
pass

#da1读取一行数据,db2写入一行数据
with open(‘db1‘, ‘r‘, encoding="utf-8") as f1, open("db2", ‘w‘,encoding="utf-8") as f2:
for line in f1:
new_str = line.replace("alex", ‘st‘)
f2.write(new_str)

3、关闭文件

f.close()

with方式打开一个文件

with open(‘xb‘) as f:
     pass
时间: 2024-08-22 20:39:51

03_文件操作的相关文章

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