Python基本语法 打开文件
打开文件的操作
数据是写在文件里面的,open file 可以实现 读取数据 写入数据
一般的文件操作步骤:
- 先打开文件
- 读取文件数据
- 写入数据
- 关闭文件
注意:文件打开后,最后一定要记得关闭文件,否则会引起很多问题
1.打开文件,使用的方法为open() 内置函数
f=open('文件名称/文件路径')
2.读取文件:
f.read() 就可以读取文件所有数据(读取的数据类型为字符串)
读取的方法有:
mode='r' 读取模式 (一般默认的模式为:读取模式) 所以,如果是进行文件读取,可以默认不传,但是前提必须是,读取时,文件必须存在,否则会报错
mode='rb' 也是读取模式,不过一般是以二进制格式打开一个文件,用于读写。一般用于非文本文件,例如图片
#打开文件 f = open('python_test.txt')#如果你读取的是同一个文件夹下,不需要加路径,不同文件下,需要加上详细的路径信息 #读取数据 data = f.read()#read 读取出来的数据是字符串 print(data)
print(type(data)) #打开文件读取出来的数据为字符串类型
#关闭文件 f.close()
输出结果为:
<class 'str'>
如果想将返回的字符串数据,存放在一个列表里面,方便后续处理,可以使用之前字符串的一个方法,split() 分割
split() 内置函数返回的结果为,字符串列表(分割后的参数为字符串形式,存储在列表内)----可以自行实践
new_data = data.split('\n') #将返回的字符串以换行符进行切割存储 print(new_data)
3.写入文件
文件不存在(就是在一个新的文件里面,写入需要写入的数据)
- mode='w' 覆盖模式
- 在w模式下,如果之前没有这个文件,将会在传入的路径下创建一个新的文件
#使用默认的mode='r'模式 file=open('data.txt') #执行会报错 #使用mode='w'模式,写入除中文以外的字符,可以使用 file=open('data.txt',mode='w')#可以在当前路径下创建一个新的文件;data.txt #如果要在文件里面写入中文,需要设置编码格式 encoding=utf-8,否则会乱码 file = open('new_file.txt','w',encoding= 'utf-8')#添加编码格式encoding='utf-8' #写入数据 file.write('这是一篇很好的文章') #关闭文件 file.close()
- 使用格式说明
- 使用open()内置函数打开文件,进行操作的过程中,不需要传入关键字mode,只需要传入对应的读取模式就行
- 原因是:open函数的源码部分,传入的参数位置:def open(file,mode ='r',buffering = None,encoding = None,......)
- 其中,mode为第二个位置参数,所以可以不用写,但是其他的需要传入,不然会报错,例如,常用的encoding位置参数
- 在w模式下,如果之前没有这个文件,将会在传入的路径下创建一个新的文件
注意事项:如果之前已经存在相同名称的文件,使用mode='w'模式,会覆盖之前的文件内用,所以使用时需要很谨慎
- 如何解决被覆盖的问题
- mode='a' 追加模式
- 在a模式下,如果之前不存在的文件,会创建新的文件,且在每运行一次后,将新写入的内容追加到文档的最后位置
- mode='b' 二进制模式 不能单独使用,要跟r,w组合使用,其中,图片就是的使用二进制打开和存储的
file = open('你好.png',mode='rb') #读数据 print(file.read())#打印出一串16进制的数字 #关闭文件 file.close()
- mode='t' 文本模式 上面说的mode='r',实际上就是mode='rt',因为默认都是用txt打开
- mode='+' 加模式 组合使用 r+ :可读可写,其中可写为追加模式
file = open('new_file.txt',mode='r+',encoding= 'utf-8') file.read()#先读 #写入数据 file.write('这是一本很有意思的书')#再写 #关闭文件 file.close()
4.文件的操作之 seek
seek:表示光标在哪里
- 打开一个文件时,光标在最开始的位置
- 打开一个文件,w+的模式写入一些数据,但是没有关闭文件。再次读取时,不会读取到数据,因为此时的光标在最末尾(所以,一定要注意,打开文件,操作完成后,一定要关闭文件,再进行下一步操作)
-
#此操作读取不到文件数据 f = open('demo.txt','w+')#'w+'可以同时具备可读可写能力 f.write('new line') print(f.read())
#打开文件,操作完成后,关闭文件,再打开操作,就可以读取到最新数据 f = open('demo.txt','w+') f.write('new line') f.close() f = open('demo.txt','r') print(f.read()) #结果:new line
5.readlines 读取每一行,会存放在列表当中,每一行的数据就是列表的一个元素
read 读取的数据是一整个字符串
#使用read() 读取全部数据 file=open('data.txt',encoding='utf-8') data=file.read() print(data) print(type(data)) 输出结果: 这是第一行内容 这是第二行内容 这是第三行内容 <class 'str'> #使用readlines() 读取数据 data1=file.readlines() print(data1) print(type(data1)) 输出结果: ['这是第一行内容\n', '这是第二行内容\n', '这是第三行内容'] <class 'list'>
readlines() 方法取出的数据为字符串,且存储在列表当中,且字符串末尾存在一个换行符,如果想要将返回的数据取出换行符,可以使用for循环进行遍历,取出每个字符串,然后使用字符串的strip() 方法,去除字符串首尾空格或者是换行符
方法二:使用enumerate() 方法 (可以多多了解,工作当中很实用)
file=open('data.txt',encoding='utf-8') data1=file.readlines() print(data1) print(type(data1)) for line,data in enumerate(data1): if line == len(data1)-1: print(data) #根据数据对应的下标位置,获取对应数据 else: print(data[:-1]) 输出结果: 这是第一行内容 这是第二行内容 这是第三行内容
6.with语句:可以让我们节省关闭文件的操作
首先,工作当中,我们经常遇到一些任务,可能事先需要设置,事后再做清理的工作。对于这种场景,Python的with语句提供了一个非常方便的处理方式。一个很好的例子就是文件处理,你需要获取一个文件句柄,从文件中读取数据,然后关闭文件句柄(此方法就是防止,书写过程中,忘记关闭文件,而导致报错)
with
语句是Python中的一种语法结构,用于创建一个上下文环境,可以自动管理资源的分配和释放。通常用于打开文件、建立数据库连接等场景中,可以避免忘记关闭资源而导致的问题。在with
语句块内部,资源会自动分配给一个变量,当代码块执行完毕时,该变量会自动被清理,从而释放资源。
with语句的语法:
with open(file) as filename:
使用方法:
with open('data.txt') as f:
data= f.read()
data1=f.readlines()