发布于2020-03-19 17:10 阅读(1717) 评论(0) 点赞(19) 收藏(1)
open() 有三个参数:1. 文件路径 (文件夹路径+文件名+文件类型) 2. 编码方式(encoding)3. 模式(mode)
fl = open('d:\python.txt',encoding='utf-8',mode='r') #d:\python.txt是我d盘下的一个名为python的TXT文件,我写这个文件时时用sublime软件写的,以utf-8编码格式保存的,所以encoding参数是utf-8。
content = fl.read()
print(content)
fl.close #每次操作文件后一定要关闭
>>>i love python
open:内置函数,open底层调用的是操作系统的接口。
fl:变量,一般在文件操作时设置的约定俗成的变量,也有写作为f1,fh,file_handler,f_h等,也被称为文件句柄(但它只是一个约定俗成的变量,自己可以随意更改,但最好不要改)。通过对文件进行的任何操作都需要用:文件句柄.(fl.raed()等)的方法。
encoding:可以不写,不写参数会以操作系统默认的编码本打开(windows默认编码:gbk(windows10是utf-8,Linux:utf-8,mac:utf-8),但最好写上,内存中全是Unicode编码,而内存中的文件则不是(详细介绍请看python基础学习day7)
mode:可以默认不写,默认不写则以只读(r)的方式打开
常见报错原因:
UnicodeDecodeError:文件储存时与文件打开时编码本不一致。
路径分隔符产生问题: (反斜杠) 有转义符的意思,如\n、\t、\u等,若果文件放在c盘中则有可能报错。如下:
fl = open('C:\Users\a1566\Desktop\python.txt',encoding='utf-8',mode='r')
content = fl.read()
print(content)
>>>SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape
#解决方法:在文件路径前加r,让转义符失效
fl = open(r'C:\Users\a1566\Desktop\python.txt',encoding='utf-8',mode='r')
content = fl.read()
print(content)
>>>i love python
文件的读取:
r , rb , r+, r+b.
read() 若括号中无参数则一次全部读出,若写参数(数字)则可以按照字符(从1开始)读取,文件中的换行符算作一个字符。
fl = open(r'd:\python.txt',encoding='utf-8',mode='r')
content = fl.read()
print(content)
fl.close()
>>>i love python
content = fl.read(5)
print(content)
>>>i lov
readline() 若括号中无参数则读一行,若写参数(数字)则可以按照字符(从1开始)读取字符(同read),文件中的换行符算作一个字符。注意,文本中有换行符,而print()函数也默认换行。
fl = open(r'd:\python.txt',encoding='utf-8',mode='r')
content = fl.readline()
print(content) #可更改print的默认输出结构以取消print函数默认输出的换行符:print(content,end='')
>>>i love python.
#换行符也被读出来了
readlines() 若括号中无参数读取所有行,返回列表,列表的每个元素为源文件的每一行,若写参数(数字)则可以按照每一行读取。
fl = open(r'd:\python.txt',encoding='utf-8',mode='r')
content = fl.readlines()
print(content,end='')
fl.close()
>>>['i love python.\n', 'i love you too.']
循环读取,文件句柄可遍历(文件句柄是一个迭代器,每次for循环时都只读取文件一行,节省内存,而read,readlines等是一次读取至内存中,若果文件过大,则会出现问题)。
f = open(r'd:\python.txt',encoding='utf-8')
for line in f:
print(line)
f.close()
>>>i love python.
i love you too.
rb:操作的是非文本的文件,比如:图片,视频,音频等。rb模式不用encoding
fl = open(r'd:\雪景.jpg',mode='rb') #雪景.jpg是张照片
print(fl.read())
>>> #字节太多,请自测
r+ 读写功能(读并追加),推荐先读后写
f = open(r'd:\python.txt',encoding='utf-8',mode='r+')
f.read()
f.write('1234567') #先读后写
f.close()
文件的写:
四种模式:w ,wb, w+, w+b
w,wb: 若已有相同的文件则会先清空原有文件的内容再写入 ,若无则会创建。
f = open('d:/text.txt',encoding='utf-8',mode='w') #可在当前目录下创建有一个名为text的TXT类型的文件,若已有文件则会先清空文件内容再写入
f.write('i love python')
f.close()
文件的追加:
a ,ab ,a+ ,a+b
a:若无文件则会创建文件。若有则直接在原文件后追加
f = open('d:/text.txt',encoding='utf-8',mode='a')
f.write('\ni love you too')
f.close()
tell() 读取指针(光标)的位子,以字节为单位(utf-8编码:一个中文三个字节,一个字母1个字节,详情请看day2)
fl = open(r'd:\python.txt',encoding='utf-8')
print(f1.tell())
>>>0
content = fl.read()
print(fl.tell)
>>>25
fl.close()
seek() 调整光标的位置,以字节为单位
fl = open(r'd:\python.txt',encoding='utf-8')
print(f1.seek(8))
flush() 强制刷新(保存),一般在写文件时使用,在写后一般要对文件句柄使用flush方法,以免保存失败。
f = open(r'd:\text.txt',encoding='utf-8',mode='w')
f.write('\ni love you too')
f.flush()
f.close()
打开文件的另一种方式(推荐)
with open(r'd:\text.txt',encoding='utf-8',mode='a') as f:
f.write('\ni love you too')
#打开多个文件:
with open(r'd:\text.txt',encoding='utf-8',mode='a') as f1,open\(r'd:\python.txt',encoding='utf-8',mode='a') as f2: #第二个open后的反斜杠为换行符,换行符后不加任何字符,当一行的代码太长时可以使用
f1.write('\ni love you too')
f2.read()
文件的修改操作:
各大操作文件的软件(word、笔记本等等)底层都以以下基本方式操作文件:
实列方法(将d盘下的python.txt文件中的小写o全变为大写,python文件中的内容如下:i love python./n i love you too. 文件内容简单,请自行创建即可)
import os #引入os模块
#1.以读的模式打开原文件
#2.以写的模式创建一个新文件
with open(r'd:\python.txt',encoding='utf-8') as f1,\
open(r'd:\python.bak',encoding='utf-8',mode='w') as f2: #.bak是一种备份文件类型
#3.将原文件的内容读出来修改成新的内容,写入新文件
old_content = fl.read() #读出来的为str类型
new_content = old_content.replace('o','O')
f2.write(new_content)
#4.将原文件删除
os.remove('d:\python.txt')
#5.将新文件重命名
os.rename('d:\python.bak','d:\python.txt')
以上方法(read)只能用于小文件,遇上大文件就会出现问题,因此可以对其进行更改,如下:
import os #引入os模块
#1.以读的模式打开原文件
#2.以写的模式创建一个新文件
with open(r'd:\python.txt',encoding='utf-8') as f1,\
open(r'd:\python.bak',encoding='utf-8',mode='w') as f2: #.bak是一种备份文件类型
#3.将原文件的内容读出来修改成新的内容,写入新文件
for old_line in f1:
new_line = old_line.replace('o','O')
f2.write(new_line)
#4.将原文件删除
os.remove('d:\python.txt')
#5.将新文件重命名
os.rename('d:\python.bak','d:\python.txt')
作者:sjhjf0293
链接:https://www.pythonheidong.com/blog/article/268549/93a8fbf562fab5670dcd/
来源:python黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!