Python学习:7.文件操作

文件操作

我们曾将听过一个问题,将大象放入冰箱分为三步:1、打开冰箱门,2、将大象放进去,3、关上冰箱门。今天我们要讲的Python文件操作的步骤就像将大象放入冰箱的步骤一样。

使用Python操作文件的基本步骤:

  • 打开文件
  • 对文件内容进行操作(读取文件信息,向文件中写入信息等)
  • 关闭文件

一、打开文件

在上一篇的内置函数介绍中,我们提到了open这个函数,这个函数的作用就是打开一个文件。

格式一

文件句柄 = open(文件路径,打开格式,编码)

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

f = open("c:/asd.txt","r",encode=‘utf-8‘)    #打开c盘下的asd.txt文件
date = f.read()    #读取文件内容
f.close()    #关闭文件
print(date)    #输出文件内容

格式二

with open(文件路径,打开格式,编码),使用这个打开文件不用再最后使用close()关闭文件,因为使用这个with自动进行文件关闭,但是这个需要你文件的操作都在代码块中,注意缩进。

with open("c:/asd.txt",encoding=‘utf-8‘) as f:
    data = f.read()

print(data)

代开文件的各种格式

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

r,只读文件,【默认】
w,只写文件,【不可读,不存在创建;存在则清空内容】
x,只写文件,【不可读,不存在创建,存在则报错】
a,追加模式,【不可读,不存在创建,存在则只追加内容】

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

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

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

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

以b方式打开时,读取到的内容是字节类型,写入时也需要写入的是字节类型。

二、对文件内容进行操作

使用一般格式打开文件

1、使用只读格式打开文件的时候,进行文件写入就会报错。

2、使用写入格式代开文件的时候,会清除原有内容,然后重新写入内容。

f = open("asd","w")#清空原有文件内容
f.write("asd")#重新写入
f.close()

3、使用只写模式打开文件,没有文件就创建,有文件的时候就报错。

然后我们再次使用上一条命令,就会发生报错,因为文件存在了。

4、追加模式打开文件,当文件不存在的时候创建文件,当文件存在的时候在文件结尾追加内容。

f = open("asd","a")#不存在创建,存在追加
f.write("asd")
f.close()

使用字节格式打开文件

1、只读格式

f = open("asd","rb")#在这里打开时是以字节方式读,所以不需要加encoding="utf-8"
data = f.read()
f.close()
print(type(data))

输出结果:
<class ‘bytes‘>

2、只写格式

f = open("asd","wb")
data = f.write(bytes("中国",encoding = "utf-8"))
f.close()    #用字节方式写入时,需要把字符串转换为字节

两种打开方式的内部编码机制

普通格式

  python内部将010101自动转换为字符串(因为在本质上在在硬盘里存的就是0101,所以在读取数据时也是0101,而普通打开时,会自动将字节转换为字符串默认使用utf-8编而在转字符串是我们可以指定什么编码格式转成字符串)。

010101======>python解释器(转换为字符串)=====>程序员看到

字节格式

  用字节方式打开时字节直接给到程序员,没有编译过程,所以不能添加encoding =""在你写入是,如果你写入的是字符串,你需要吧字符串转换为010101,不然会报错因为字节方式打开没有编译过程,存储时也不会自动编译成0101所以需要自己吧字符串转换为字节f.write(bytes("中国",encoding = "utf-8")),才能保存。

010101======>程序员看到

示例

使用字节格式读取文件,文件里原来存储的是"中国"。

f = open("asd","rb")
data = f.read()
f.close()
print(data)
data1 = str(data,encoding = "utf-8")
#如果是用python存储的就是utf-8,如果是自己在记事本写的可能需要用gbk
print(data1)

输出结果:
b‘\xe4\xb8\xad\xe5\x9b\xbd‘
中国

使用字节格式写入文件,文件中存储的还是"中国"。

f = open("asd","wb")
str_a = "中国"
bytes_a = bytes(str_a,encoding="utf-8")
f.write(bytes_a)
print(bytes_a)
f.close()

输出结果:
b‘\xe4\xb8\xad\xe5\x9b\xbd‘

使用一般格式输入输出的都是字符串,使用字节格式输入输出的都是字节,在我们使用的时候一般不使用字节格式进行文件读写。

有关读写文件内部指针问题

f = open("world.txt", "r+",encoding=‘utf-8‘)
data = f.read()
print(type(data), data)

f.write("地球村")
a = f.read()
print(type(a), a)
# 在这里输出的是空的,在读写时有一个指针,你读一个,指针就向后移一个,追加一个字符就再向后移一个,等你再次输出是,指针就指向空的地方,所以输出是空的
print(f.tell())#输出指针位置,字节,一个汉字三个字节
f.close()

输出结果:
<class ‘str‘> 地球
<class ‘str‘>
9

相关示例:

文件原内容:alexsel

f = open("name.txt", "r+")
data = f.read(3)
print(type(data), data)
print(f.tell())     #输出当前指针位置
f.write("地球村")
print(f.tell())
a = f.read()
print(type(a), a)
print(f.tell())
f.close()

输出结果:
<class ‘str‘> ale
3
13
<class ‘str‘> xsel
13

我们指针之前的字符进行读取怎么办,我们可以使用seek()调整指针位置。

f = open("name.txt","w+",encoding="utf-8")
f.write("三顾茅庐")
f.seek(0) #这个可以将指针移动到最开始(0),不移动,在输出是就的是空的
data = f.read()
f.close()
print(data)

输出结果:
三顾茅庐

使用追加模式打开文件的时候,文件指针直接在最后。

f = open("asda.log","a+",encoding="utf-8")
print(f.tell()) #使用追加的时候,打开文件的时候,指针直接在最后
data = f.read()
print(data) #指针直接在最后,所以这里输出为空
f.seek(0)
data = f.read()
print(data)
f.close()

输出结果:
7

alexsel

三、文件关闭

之前我们在文件操作中一直在使用,使用close()进行文件关闭,不对文件文件关闭会导致出错。

文件操作中使用到的方法

file为文件句柄

file.close()
方法刷新缓冲区里任何还没写入的信息,并关闭该文件,这之后便不能再进行写入。

file.write()
向文件中写入数据

file.fulsh() 
刷新文件内部缓存区

f1 = open("asda.log","r+",encoding="utf-8")
f1.write("啊啊啊啊啊")
f1.flush()
f1.seek(0)
print(f1.read())

输出结果:
啊啊啊啊啊

当文件还没有关闭时,这些东西就还没有存到硬盘里,只是在内存里就像你在记事本输入了一串字符但是没有保存一样,只是在内存里,flush()功能就是把写入的字符进行存储,就像记事本里的保存一样,把内存的内容刷新到硬盘里。

file.name

获取操作文件的文件名

f = open("name.txt","r+",encoding="utf-8")
ut = f.name
print(ut)

输出结果:
name.txt

file.readable()
判断打开文件是否可读

f1 = open("asda.log","r+",encoding="utf-8")
pd=f1.readable()
print(pd)

输出结果:
True

file.readline()
仅读取一行数据(自动把指针放在第一行末尾,再读时,就是从第二行开始)

#问价内容:第一行是三顾茅庐,第二行是alexsel
f1 = open("name.txt","r+",encoding="utf-8")
data = f1.readline()
print(data)
data1 = f1.readline()
print(data1)
f1.close()

输出结果:
三顾茅庐

alexsel

file.seekable()
指针是否可操作

f1 = open("name.txt","r+",encoding="utf-8")
ut = f1.seekable()
print(ut)
f1.close()

输出结果:
True

总结:

  • 不管是读文件还是写文件,操作完成后都要调用close()来关闭文件
  • 但是调用with… as就可以省去close()了
  • 可以指定读取和写入文件编码方式,就是在对用函数中加入encoding=’xxx’
  • 我们可以使用各种方法方便我们对文件的操作
  • 读写文件是我们需要注意一下指针的位置

今天的Python的文件操作就到这里,这里仅仅是简单的学习,以后我们做简单的项目的时候会加深练习。

原文地址:https://www.cnblogs.com/liudi2017/p/9189363.html

时间: 2024-12-26 12:20:06

Python学习:7.文件操作的相关文章

Python学习之--文件操作

Python中对文件操作可以用内置的open()函数 读文件 f=open('/home/test/test.txt','r') # 读模式打开文件 f.read() # 读取文件内容 除了正常的读取文件内容,一个常用的操作是判断文件内容是否为空,如下: if len(f.read())==0: # 如果文件内容为空 xxxx 判断一个文件或者路径是否存在,如下(这里需要在代码中导入os module: import os): file='/home/test/test.txt' dir='/h

python学习--day17-19 文件操作 r w a

python基础-文件操作   一.文件操作 对文件操作的流程 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件       打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文件句柄对该文件操作. 打开文件的模式有: r ,只读模式[默认模式,文件必须存在,不存在则抛出异常] w,只写模式[不可读:不存在则创建:存在则清空内容] x, 只写模式[不可读:不存在则创建,存在则报错] a, 追加模式[可读:   不存在则创建:存在则只追

PYTHON学习之文件操作;

文件内容替换for line in flielinput.input("filepath",inplace=1):line = line.repace("oldtext","newtext")print line, python中对文件.文件夹(文件操作函数)的操作需要涉及到OS模块和shutil模块.1.得到当前工作目录,即当前PYTHON脚本工作的目录路径:os.getcwd()2.返回指定目录下的所有文件和目录名:os.listdir()3

Python学习日记---文件操作

与文件操作有关函数: 1.打开一个文件open("文件名","打开方式") 打开方式归类: 模式 打开方式 文件存在 文件不存在 r 只读 打开文件 报错 w 只写 清空文件并打开 创建并打开 a 只写 打开并追加 创建并打开 r+ 读写 从文件开始读,或重写 报错 w+ 读写 清空并打开 创建并打开 a+ 读写 打开并追加 创建并打开 范例: iword.txt文件内容 First word Second word threed word oword.txt文件内

python学习_day07——文件操作

文件操作 一.操作文件三要素 1. 路径    #文件存放的具体位置的路径 2. 编码    #文件打开的的编码格式:utf-8 3. 模式 - rb:以字节的方式只读 obj = open('D:\美女模特空姐护士联系方式.txt',mode='rb') content = obj.read() obj.close() print(content,type(content)) #字节类型 - r: 读取utf-8编码数据,[转换]成unicode(str)编码的数据 #实例: obj=open

python 学习分享-文件操作篇

文件操作 f_open=open('*.txt','r')#以只读的方式(r)打开*.txt文件(需要与py文件在同一目录下,如果不同目录,需写全路径) f_open.close()#关闭文件 打开文件的模式有: 模式 描述 r 以只读方式打开文件.文件的指针将会放在文件的开头.这是默认模式. rb 以二进制格式打开一个文件用于只读.文件指针将会放在文件的开头.这是默认模式. r+ 打开一个文件用于读写.文件指针将会放在文件的开头. rb+ 以二进制格式打开一个文件用于读写.文件指针将会放在文件

python 学习 D8 文件操作 常用操作方法 文件的改

文件操作初识 在d盘创建"护士空姐学生少妇联系方式"的txt 文件 path 文件路径:d:\护士空姐学生少妇联系方式.txtencoding编码方式:utf-8,gbk....mode 操作方式: 只读,只写,追加,读写,写读..... # f2 = open('护士学生空姐班主任.txt', encoding='utf-8') # print(f2.read()) # f1.close() 路径:绝对路径:从根目录开始一直找到文件. 相对路径:从当前目录开始找到的文件. 错误原因分

python学习笔记文件操作(六)

1.文件操作流程: 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 如下文件: 2017-03-24 11:25:06:349 - info: [debug] [AndroidBootstrap] Sending command to android: {"cmd":"shutdown"} 2017-03-24 11:25:06:355 - info: [debug] [AndroidBootstrap] Received command 

Python学习笔记——文件操作

python中,一切皆对象.   一.文件操作流程 (1)打开文件,得到一个文件句柄(对象),赋给一个对象: (2)通过文件句柄对文件进行操作: (3)关闭文件. 文件对象f通过open()函数来创建. open函数常用的三个参数:文件路径/名称.模式.encoding. 1 f = open('测试文件','r',encoding='utf-8') 2 print(f.read()) 3 f.close() 二.open函数中模式参数的常用值 值 描述 'r' 读模式 'w' 写模式 'a'

Python学习day7文件操作

文本操作 # 读取utf-8编码数据,[转换]成unicode(str)编码的数据 # obj = open('D:\美女模特空姐护士联系方式.txt',encoding='utf-8',mode='r') # content = obj.read() # obj.close() # print(content,type(content)) # obj = open('D:\美女模特空姐护士联系方式.txt',mode='rb') # content = obj.read() # obj.clo