Python文件读写
Posted hongyu0518
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python文件读写相关的知识,希望对你有一定的参考价值。
Python中打开文件命令 open(),open命令返回文件的一个句柄:如:
f = open(‘e:\123.txt‘) # read()对打开的文件进行读的操作 print(f.read()) # 关闭文件,文件打开后一定要记得关闭文件。在写的时候 可以:打开,关闭先写完,再写打开和关闭中间的代码 f.close()
f = open(‘e:\123.txt‘) #这段代码,open 没有指定 mode= 参数,默认使用只读的方式打开文件,文件没有写的权限 f = open(‘e:\123.txt‘) f.write(‘hello python‘) f.close()
上面的代码会报错 io.UnsupportedOperation: not writable
另外,如果没有使用为open指定 encoding= 参数,计算机默认使用系统的编码方式打开文件。windows下默认为 gbk, linux下默认为utf-8
文件的打开方式格式: 文件句柄 = open(‘文件路径‘,打开模式, 编码方式)
文件打开方式:
1.r, 只读的方式打开(文件必须存在,如果文件不存在,则会抛出异常) 注:文件以什么方式编码方式写的,就以什么编码方式打开
f = open(‘e:\123.txt‘,mode=‘r‘,encoding=‘utf-8‘)
print(f.read())
f.close()
2.w, 只写模式 (文件不可读,如果文件不存在,则创建一个新的文件,如果文件存在,则会清空里面的内容)
f = open(‘e:\123.txt‘,mode=‘w‘,encoding=‘utf-8‘) f.write(‘hello python!‘) # 在写的时候,要指定编码的方式 f.close()
3.a,只追加写的模式 (文件不可读,不存在则创建新的文件,文件存在的话,可在后面追加内容)
f = open(‘e:\123.txt‘,mode=‘a‘,encoding=‘utf-8‘) f.write(‘jack is a student‘) f.close()
对于非文本的文件,使用b的模式。‘b‘表示以字节的方式进行操作 如:rb,wb,ab 分别对应以上内容,如果以b的方式打开,读取到的内容是字节类型,写入的时候也需要提供字节类型,不能指定编码
f = open(‘e:\123.txt‘,mode=‘rb‘) # 指定encoding= 参数 会报错 print(f.read()) # b‘xd6xd0xb9xfa f.close()
以上代码 输出:b‘xd6xd0xb9xfa‘ 如果在写的模式下,写的时候也要以字节的方式进行写
‘+‘模式 ---- r+: 读写模式 w+:写读模式 a+:写读模式
f = open(‘e:\123.txt‘,mode=‘r+‘,encoding=‘gbk‘) print(f.read()) f.write(‘helo‘) print(f.read()) # 此处在读的时候,就读不到 后面的 hello了,因为,在执行完 write(’hello‘) 这段代码后,光标移动到了文件的末尾 f.close()
在 r+ 模式下,应该先读,后写,如果先写,后读,同样的道理,光标移动到了文件末尾,将读取不到内容
f = open(‘e:\123.txt‘,mode=‘w+‘,encoding=‘gbk‘) f.write(‘你好,hellopython‘) # 清空文件中的内容,然后重新写数据 f.seek(0) # 将光标移动到文件开头 print(f.read()) f.close()
f = open(‘e:\123.txt‘,mode=‘a+‘,encoding=‘gbk‘) # 在 a+ 模式下,将在文件的末尾追加数据,不会覆盖原来的内容 f.write(‘ jack is a student‘) f.seek(0) # 将光标移动到文件开头 print(f.read()) f.close()
文件读取的其他操作
很多时候,在读写文件的时候,只是打开文件,open 而忘记关闭文件,close,可以使用简单的方式来操作,使用with open。如:
l1 = [‘静夜思‘,‘李白‘,‘床前明月光‘,‘疑是地上霜‘,‘举头望明月‘,‘低头思故乡‘] with open(‘e:\静夜思.txt‘,mode=‘w+‘,encoding=‘utf-8‘) as f: for l1_data in l1: f.write(l1_data + ‘ ‘) # f.writelines(l1) 可以将列表l1中的内容全部写进去,但是不换行 f.seek(0) # 将光标放到文件首 print(f.readlines()) # 逐行读取文件,并将文件按行为元素保存到一个列表中 f.seek(3) index = f.tell() # 获取当前光标的位置 print(index) # 打印 3
关于seek 和 tell 这两个函数
with open(‘e:\123.txt‘,mode=‘w+‘,encoding=‘utf-8‘) as f: f.write(‘abcdefgh‘) # 一共 8 个字符,现在想要读取ef两个字符 f.seek(4) # 将光标移动到4的位置,也就是 d 的后面,从e开始读取 index = f.tell() #获取光标位置 print(f.read(2),index) # 读取两个字符,将读到 ef
with open(‘e:\123.txt‘,mode=‘w+‘,encoding=‘utf-8‘) as f: f.write(‘中国一定强‘) # 在文件中写入: 中国一定强 按照 utf-8的编码方式写入 f.seek(6) # 将光标移动到位置 6 index = f.tell() # 读取光标的位置 print(f.read(2),index) # 读取两个字符
以上代码 输出 :一定 6
这里需要注意的是:移动光标 seek 以及 读取光标位置 tell 这两个函数,如果是英文字母。则一个字符为一个位置,如果是其他,按照编码方式来指定或者获取位置
中文 utf-8 的编码方式,一个汉字占用 3 个字节,所以 ‘中国‘占用6个位置 在移动光标,或者获取光标位置的时候 要三个三个的移动
read 在读取的时候,按照能用眼睛看到的最小单位来读取
以上是关于Python文件读写的主要内容,如果未能解决你的问题,请参考以下文章