《我的世界》Python编程入门(12)文件操作

一切皆文件!文件、目录、硬件设备、网络
字符流、字节流(二进制)
IO类操作的注意事项:文件是否存在,文件是否关闭

一、文件操作基础

读写文件是最常见的IO操作。
Python内置了读写文件的函数open()
在读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以,读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作系统提供的接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件对象(写文件)。
文件对象必须正常关闭,否则打开的文件一直留存在内存中。
这样会什么危害?(同时能打开的文件的数量有限制,内存大小有限制!)

二、open函数

open()函数用于打开一个文件,并返回文件对象,在对文件进行处理都需要使用到这个函数,如果文件无法被打开,会报错。
open()函数常用形式是接收两个参数:文件路径(file)模式(mode)
例如:open(file, mode='r')
参数说明:
file: 必需,文件路径(相对或者绝对路径)。
mode: 可选,文件打开模式

mode是一个可选字符串,用于指定打开文件的模式。常用的模式如下:
'r'读取(默认)
'w'写入,并先截断文件
'a' 写入,如果文件存在则在末尾追加
'b'二进制模式
't'文本模式(默认)
'+' 更新磁盘文件(读取并写入)
默认的模式是 'r'(打开并读取文本,同'rt' )。
常见的mode字符可以进行组合,常见的有:'a+','wb'
Python区分二进制和文本I/O。以二进制模式打开的文件(包括mode 参数中的'b')返回的内容为 bytes对象,不进行任何解码。在文本模式下(默认情况下,或者在 mode 参数中包含't')时,文件内容返回为 str ,首先使用指定的 encoding (如果给定)或者使用平台默认的的字节编码解码。
理论上open函数可以打开所有文件,但是某些文件的内容用字符表示可能无实际意义。

三、读写文件操作

3.1 建立文本文件

1.手工创建
(1)利用记事本(notepad.exe)创建
在Windows中最简单的建立文本方法就是打开记事本(notepad.exe)程序,输入文本,保存文件。
(2)利用右键菜单创建
在文件夹中或桌面上单击右键,在右键菜单中选择新建>文本文档创建文本文件。
(3)利用vscode创建
使用vscode创建一个新文件,默认的保存格式即文本文件(.txt)

2.利用Python创建
使用Python编程创建文本文件:

newfile='d:/t1.txt'              
b_new_file=open(newfile,'w')
b_new_file.close()

代码解读:
第1行:newfile='d:/t1.txt'
定义需要创建的文件的路径及名称(文件的位置)
第2行:b_new_file=open(newfile,'w')
使用内置函数函数open建立文件
第3行:b_new_file.close()
使用close()方法关闭新建的文件

注意事项:
文件的名称建议按照Python标识符的命名要求,即以英文字母、数字和下划线组合的字符串,不能用一些特殊字符命名,否则操作系统可能不识别。

3.2使用文件对象的write()方法写文件

基本步骤

f = open(file,'w')
#利用open函数创建文件,并返回文件对象f。
#其中file为文件的路径,open函数的模式字符串中要包含w或者a。建议用a不用w!当文件里已经有内容的情况下,w会直接把文件清空,然后写入新内容。
f.write(s)
#利用文件对象f的写入方法write()写入内容,s为字符串,即写入的内容
案例1:
newfile='d:/t1.txt'
#定义需要建立的文本名称和路径
b_new_file=open(newfile,'w')
#用open函数建立一个新的文本文件
t_n=b_new_file.write('我爱Python!')
#用文件对象write()方法写字符串
b_new_file.close()
#用close()方法关闭文件

3.3 使用文件对象read()方法读文件

基本步骤

f = open(file,'r')
f.read()
其中file为文件的路径,open函数的模式字符串中要包含r。
案例2:
newfile=r'd:/t1.txt'  
#定义需要建立的文本名称和路径 
b_new_file=open(newfile,'r')
#以只读方式打开t1.txt文件
text=b_new_file.read()
#用文件对象read()方法读取内容
print(text)
#打印读取内容
b_new_file.close()
#关闭打开的文件

如果读文件时文件不存在,open()函数就会抛出一个IOError的错误,并且给出错误码和详细的信息告诉你文件不存在。
类似以下错误信息:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
FileNotFoundError: [Errno 2] No such file or directory

3.4 复杂的文件读写

3.4.1 一次写入多行

思路:本身Python提供的文件的写入方法是一次性写入,想写入多行数据,要么把多行数据连接在一起,要么利用循环,把多行内容追加到文件中。

案例3:
nums=['one','two','three','four','five','six','seven']
t=open('d:/t2.txt','a')
for i in nums:
    t.write(i +'\n')
    #换行符为不可见字符,Python中用'\n'表示

t.close()
#程序正常运行后,打开文件观察内容是否正常写入
3.4.2 以列表形式读取多行

文件对象的readlines()方法用于读取所有行(直到结束符EOF)并返回列表,该列表可以由 Python 的 for... in ...结构进行处理。如果碰到结束符 EOF则返回空字符串。
readlines()方法语法格式如下:
文件对象.readlines()
返回值为列表,包含文件中所有的行,每行一个元素。

案例4:
fo = open("d:/t2.txt", "r")
print ("文件名为: ", fo.name)
f=fo.readlines()
print(f)
for line in f:
    #依次读取每行  
    line = line.strip()
    #去掉每行头尾空白  
    print ("读取的数据为: %s" % (line))
# 关闭文件
fo.close()
结果为
文件名为: 
d:\t2.txt
['one\n', 'two\n', 'three\n', 'four\n', 'five\n', 'six\n', 'seven\n']
读取的数据为: one
读取的数据为: two
读取的数据为: three
读取的数据为: four
读取的数据为: five
读取的数据为: six
读取的数据为: seven

四、with语句(上下文管理器),

上面的例子中,调用close()方法关闭文件太繁琐,Python提供了上下文管理器,来帮助我们关闭打开的文件。
with语句用于包装带有使用上下文管理器 定义的方法的代码块的执行。

案例5:
fn='d:/t2.txt'
with open(fn,'r') as f:
    print(f.read())

open函数的返回值赋值给变量 f,当离开 with 代码块的时候,哪怕遇到什么异常,系统会自动调用 f.close() 方法。
因此,使用with语句打开文件就⽆需显式调⽤ close⽅法。

补充:使用with语句处理大文件
read()是一次性把文件内容以字符串的方式读到内存
readlines()是一次性读取所有内容,并按行生成一个列表,
因一次性读取,若文件内容过大,内存资源不足,则会提示错误“MemoryError”
使用with open() as f:语法打开的文件,f对象为可迭代对象,使用for i in f循环,会自动使用缓冲IO以及内存管理,因此效率较高,内存占用小,可以完美的解决读写大文件问题。
因此,对文件操作强烈建议使用with语句。

五、综合案例

练习内容

1.在程序当前文件夹自动建立test.txt文件。
2.向文件中写入自己的姓名、年龄、性别、籍贯,每项内容占一行。
3.读取该文件的所有内容,并打印显示。

练习要点

1.建立路径时,需要检测路径是否存在
2.open函数的使用
3.文件对象方法的使用

代码实现

#写入文件
newpath='test.txt'
nums=['yan','20','男','河南']
t=open(newpath,'a')
#追加写入模式打开文件
for i in nums:
#循环,迭代获取列表元素
    t.write(i +'\n')
    #把每个元素循环写入文件中,行末加\n换行
t.close()
#关闭文件
print('连续写入完成!')
#提示写入结束
#读取文件,并打印输出
with open(newpath,'r') as f:
    for i  in f.readlines():
        print(i)

总结

文件操作步骤:
1.利用open函数打开或创建文件对象,open函数有两个参数,file:文件的路径,mode:文件对象的读写模式
2.利用文件对象的读写方法读写文件
3.利用文件对象的close方法,关闭文件

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值