Python基础文件操作分析

1. 打开文件

1.1 open函数

  • open函数的作用是打开一个文件,并返回打开的文件对象。
    • f = open(file, mode, encoding)
  • 参数说明:
    • file:待打开文件的路径,可以是绝对路径或相对路径。
    • mode:打开文件的方式,默认以文本读方式打开。
    • encoding:打开文件的编码方式。

1.2 打开文件的方式

打开方式含义
‘r’以读方式打开文件(默认)
‘w’以覆盖写方式打开文件,如果文件不存在则先创建再打开
‘a’以追加写方式打开文件,如果文件不存在则先创建再打开
‘x’创建文件并以写方式打开,如果文件已存在则会抛出异常
‘b’以二进制方式打开文件
‘t’以文本方式打开文件(默认)
‘+’打开磁盘文件进行更新(读取与写入)

1.3 打开文件的编码方式

  • UTF-8 是一种广泛用于表示中文字符的编码方式
  • UTF-8 编码方式的灵活性和可变长度特性使得它成为了广泛应用于多语言支持的编码方式,可以表示包括中文在内的几乎所有的 Unicode 字符。
    例:
f = open('d:/Python/test.txt', 'r', encoding='utf-8')
  • encoding参数其实并不是open函数的第三个参数,open函数还有一些其他的参数,这些参数都带有默认值,因此在调用open函数时可以不用设置这些参数
  • 如果在调用open函数时要设置encoding参数,需要通过关键字参数的方式将‘utf-8’参数指定传递给encoding形参

2. 关闭文件

2.1 close函数

  • lose函数是文件对象的一个成员函数,其作用就是将打开的文件进行关闭。
f = open('d:/Python/test.txt', 'r', encoding='utf-8')
#todo
f.close()

2.2 打开文件的上限

  • 一个程序能同时打开的文件个数是有上限的
flist = []  
count = 0  
while True:  
    f = open('F:\\test\\test.txt','r',encoding = 'utf-8')  
    flist.append(f)  
    count += 1  
    print(count)

![[Pasted image 20231204170346.png]]

  • 上述代码中用列表对所有打开的文件对象进行了保存,如果不进行保存,那么Python内置的垃圾回收机制会在文件对象销毁的时候自动关闭文件
  • 虽然垃圾回收机制能够自动关闭文件,但垃圾回收机制关闭文件不一定及时,所以仍然需要我们手动对文件进行关闭,尽量避免依赖自动关闭
  • 不能使用被关闭后的文件对象再对文件进行任何操作,否则程序会抛出异常

3. 读文件

3.1 read函数

  • 使用read函数可以从文件中读取指定个数的字符
  • 如果没有设置指定读取的字符个数,或指定读取的字符个数超过文件中的字符总数,则直接读取整个文件。
f = open('F:/test/test.txt','r',encoding = 'utf-8')  
print(f.read(7)) # 风急天高猿啸哀  
f.close()

3.2 readline函数

  • 使用readline函数可以从文件中读取一行字符
  • 再次调用readline函数则继续读取下一行
f = open('F:/test/test.txt','r',encoding = 'utf-8')  
print(f.readline()) # 风急天高猿啸哀,  
print(f.readline()) # 渚清沙白鸟飞回。  
f.close()

3.3 readlines函数

  • 使用readlines函数可以读取整个文件的内容
f = open('F:/test/test.txt','r',encoding = 'utf-8')  
print(f.readlines())   
#['风急天高猿啸哀,\n', '渚清沙白鸟飞回。\n', '无边落木萧萧下,\n', '不尽长江滚滚来。\n', '万里悲秋常作客,\n', '百年多病独登台。\n', '艰难苦恨繁霜鬓,\n', '潦倒新停浊酒杯。']  
f.close()

3.4 for循环遍历

f = open('F:/test/test.txt','r',encoding = 'utf-8')  
for line in f:  
    print(line)  
f.close()
# 风急天高猿啸哀,  
#
# 渚清沙白鸟飞回。  
#
# 无边落木萧萧下,  
# 
# 不尽长江滚滚来。  
# 
# 万里悲秋常作客,  
# 
# 百年多病独登台。  
# 
# 艰难苦恨繁霜鬓,  
#
# 潦倒新停浊酒杯。
  • 由于文件中的每一行末尾都带有换行符'\n',而print函数每次打印后也会打印一个换行符'\n',因此这里打印出来的每行文件内容之间会多出一个空行

  • print函数有一个参数叫做end,该参数就是用来设定print输出的内容以什么结尾,而end参数的默认值就是'\n'

  • 如果不想让print每次输出完数据后再输出换行符,就可以将end的值设置为空字符串

f = open('F:/test/test.txt','r',encoding = 'utf-8')  
for line in f:  
    print(line, end='')  
f.close()  
# 风急天高猿啸哀,  
# 渚清沙白鸟飞回。  
# 无边落木萧萧下,  
# 不尽长江滚滚来。  
# 万里悲秋常作客,  
# 百年多病独登台。  
# 艰难苦恨繁霜鬓,  
# 潦倒新停浊酒杯。

4. 写文件

4.1 write函数

  • 使用write函数可以将指定内容写入到文件中
f = open('F:/test/test.txt','w',encoding = 'utf-8')  
f.write('2023')  
f = open('F:/test/test.txt','w',encoding = 'utf-8')  
f.write('siwen')  
f = open('F:/test/test.txt','r',encoding = 'utf-8')  
print(f.read()) # siwen  
f.close()
  • 如果以'w'的方式打开文件进行写入,那么每一次写入的内容会覆盖文件中原有的内容,因此这里写入两次后读取到的只有第二次写入的数据
f = open('F:/test/test.txt','w',encoding = 'utf-8')  
f.write('2023')  
f.write('siwen')  
f = open('F:/test/test.txt','r',encoding = 'utf-8')  
print(f.read()) # 2023siwen  
f.close()
  • 如果想写入的数据不会覆盖文件中的原有数据,就需要以'a'的方式打开文件。
f = open('F:/test/test.txt','a',encoding = 'utf-8')  
f.write('2023')  
f = open('F:/test/test.txt','a',encoding = 'utf-8')  
f.write('siwen')  
f = open('F:/test/test.txt','r',encoding = 'utf-8')  
print(f.read()) # 2023siwen  
f.close()

5. 上下文管理器

为了避免程序员忘记关闭文件,Python提供了上下文管理器:

  • 使用with语句打开文件。
  • 当with内部的代码块执行完毕后,就会自动调用close关闭文件。
    代码示例:
with open('F:/test/test.txt','r',encoding = 'utf-8') as f:  
    line = f.readline()  
    print(line)
  • 在执行with内部的代码块时,无论因为什么原因而跳出with内部的代码块,都会自动调用close将对应的文件关闭。
  • 19
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值