【python学习】数据文件的读写操作2-注意事项

python 之读取文件 - 木棉花的漂泊 - 博客园

正确的python文件读的方法_Python文件读取的3种方法及路径转义_weixin_39552472的博客-CSDN博客

本文简述python如何读文件、写文件 ,如何注意字符编码问题、如何避免文件路径转义

目录

一. 读文件

二、写文件

三、字符编码问题

四、转义问题


一. 读文件

以读文件的模式打开一个文件对象,使用python内置的函数open(),传入文件名和标识符:

f=open('E:\python\test.txt','r')  

打开文件后,python调用read()方法一次读取文件全部内容到内存,用str对象表示:

f.read()   # 输出'hello,python!'

最后调用close()方法关闭文件:

f.close()

注:文件使用完毕后必须关闭,否则文件对象会继续占用操作系统的资源,并且操作系统同一时间能打开的文件数量是有限的。

改进1.  try....finally

文件不存在时,open()会抛出IOError错误,一旦出错,后面的f.close()就不被调用,也就无法保证能正确关闭文件。

try:
   f = open('/path/', 'r')
   print(f.read())
finally:
   if f:
        f.close()

改进2.  with...as

python引入with语句自动调用close(),代码更简洁,且不用写f.close()方法

with open('/path/','r') as f:
     print(f.read())

改进3. read(size) / readline() / readlines()

调用read()会一次性读取文件的全部内容,如果文件有20G,内存直接就爆了

read() # 文件很小,一次性读取更方便
read(size) # 反复调用,每次最多读取size个字节的内容
readline() # 每次读取一行内容
readlines() # 一次读取所用内容并按行返回list

二、写文件

与读文件类似,调用open()函数,传入标识符'w'或'wb',写入文本文件或二进制文件:

with open('E:/python/test.txt', 'w') as f:
    f.write('Hello, Python!')

三、字符编码问题

# 读取非utf-8编码的文本文件,需要给open()函数传入encoding参数,eg:读取gbk编码的文件:
open('E:/python/gbk.txt', 'r', encoding='gbk')
# 有些文件编码不规范,出现UnicodeDecodeError,是因为文本文件中夹杂了一些非法编码的字符。此时,最简单的方法是直接忽略,设置open()函数的errors参数
open('E:/python/gbk.txt', 'r', encoding='gbk', errors='ignore')

如果 Python 解释器提示UnicodeDecodeError异常,其原因在于,目标文件使用的编码格式和 open() 函数打开该文件时使用的编码格式不匹配。

解法1.

将 open() 函数中的 encoding 参数值修改为和目标文件相同的编码格式(utf-8或者gbk);

解法2.

重新生成目标文件(即将该文件的编码格式改为和 open() 函数中的 encoding 参数相同);

解法3.

先使用二进制模式读取文件,然后调用 bytes 的 decode() 方法,使用目标文件的编码格式,将读取到的字节串转换成认识的字符串。

 #以二进制形式打开指定文件,该文件编码格式为 utf-8
 f = open("my_file.txt",'rb+')
 byt = f.read()
 print(byt)
 print("\n转换后:")
 print(byt.decode('utf-8'))
 f.close()

# 程序执行结果为:
b'Python\xe6\x95\x99\xe7\xa8\x8b\r\nhttp://c.biancheng.net/python/'

转换后:
Python教程
http://c.biancheng.net/python/

四、转义问题

open('g:\test.txt', 'r')  # 报错:IOError:invalid mode('r') or filename

出错是因为路径被转义了

改错1:用 '/' 替换 '\'

f = open('g:/test.txt','r')

改错2:加上 r'path'

f = open(r'g:\test.txt', 'r')

转义示例:

f = 'g:\\test.txt'  # 'g:\\test.txt' 未被转义
f = r'g:\test.txt'  # 'g:\\test.txt' 未被转义
'g:\a.txt'  # 'g:\x07.txt' 被转义
'g:\\a.txt'  # 'g:\\a.txt' 未被转义

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值