文件处理
文件操作
读文件
文件的处理分为读r,写w
读一个文件格式为,此方法是读在内存里
f= open(file = D:/xxxx.txt,mode = "r",encoding="utf-8")
data = f.read()
f.close()
测试:
f = open(file="D:/test.txt",mode="r",encoding="utf-8")
data = f.read()
print(data)
f.close()
运行报错
Traceback (most recent call last):
File "C:\Users\zhoukaivfx\AppData\Local\Programs\Python\Python37-32\lib\codecs.py", line 322, in decode
(result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb2 in position 0: invalid start byte
存的时候是什么编码格式,读的时候也要什么编码,不然会报错。python3默认是utf-8,所以会报错。
windows 默认的文件是gbk所以编码格式改为gbk
f = open(file="D:/test.txt",mode="r",encoding="gbk")
data = f.read()
print(data)
f.close()
文件处理-二进制模式 rb rw
怎么查看文件的编码格式,可以不指定编码模式。r是指读的文本模式,可以把r改为rb,执行输出结果是二进制的编码,不可读,用于网络传输(视频,图片,文本,网络传输用的)
f = open(file="D:/test.txt",mode="rb")
data = f.read()
print(data)
f.close()
输出是二进制的编码
b'\xb2\xe2\xca\xd4\xce\xc4\xbc\xfe'
二进制文本写入
f = open(file="yesterday once more2.txt",mode='wb') # 二进制写入
f.write("hello,word\n".encode()) # 写入,解码
f.close()
文件处理-智能检查编码的工具
可以用第三方的模块,chardet,需要手动安装
cmd
pip3 install chardet
安装成功
import chardet
f = open(file="D:/test.txt",mode="rb")
date = f.read()
f.close
result = chardet.detect(date)
print(result)
得到的结果是个字典,有编码格式,可信度(不是百分百准确),语言
解码
date.decode("gbk")
写模式操作文件
格式:
f = open(file="D:/test.txt",mode="w",encoding="utf-8")
f.write("xxxxxxx")
f.close()
w 是创建文件,写入内容,如果已存在这个文件,就会覆盖删除原来的,所以用写模式需要慎重
追加模式
跟写一样,w 改为 a ,a = append ,只能追加不能读:
f = open(file="D:/test.txt",mode="a",encoding="utf-8")
f.write("\nxxxxxxx") # 在尾部追加一行字符 \n 换行
f.close()
文件的常用操作
f = open(file="yesterday once more1.txt",mode='r',encoding='utf-8')
print(f.readline()) # 打印一行
for i in range(5): #打印5行
print(f.readline())
for line in f.readlines(): #打印每行
print(line)
# 替换第10行
for index,line in enumerate(f.readlines()):
if index == 9:
print("---------分割线----------")
continue
print(line)
f.close()
上面代码替换第10行是内存读,也可以硬盘读:
count =0
for line in f:
if count ==9:
print("--------分割线--------")
count +=1
continue
print(line)
count +=1
f.close()
文件的其他操作
# @Author :Nepoleon
f = open(file="yesterday once more1.txt", mode='r', encoding='utf-8')
print(f.tell()) # f.tell()查看光标在哪
print(f.read(6)) # 只读前6个字符
print(f.readline())
print(f.readline())
print(f.readline()) # 读三行
f.seek(0) # 光标回到0 可跟参数,移动到指定位置
print(f.encoding) # 打印文件编码格式
print(f.fileno()) # 文件编号,不怎么用
print(f.name) # 打印文件名字
print(f.seekable()) # 返回True or False,能移光标就是True,比如,linux系统都是文件,终端也是,但是终端不能移动光标
print(f.readable()) # 判断文件是否可读
print(f.writable()) # 判断文件是否可写
print(f.closed) # 判断文件是否关闭
print(f.flush()) # 刷新文件,刷新内容,自动保存到硬盘
# 具体操作。打开终端-
# f.write("xxxxx")
# f.flush() 在写入的文件里,已经有了写入的信息
f.truncate(10) # 类似切片,什么都不写,就是清空文件,10 就是光标后10个字符的内容
混合操作文件
- 读写模式
先读后写,以读的模式打开,往后追加
f = open(file="D:/test.txt,"r+",encoding="utf-8")
date = f.read()
f.write(\n"tobeornot")
f.close()
- 写读模式
写读是以创建模式打开,可以读新写的内容,但是会覆盖之前的内容。
f = open(file="D:/test.txt,"w+",encoding="gbk")
date = f.read()
f.write(\n"tobeornot")
f.close()
- 还有追加读 a+
f = open(file="yesterday once more2.txt",mode='a+',encoding='utf-8') # 追加读
f.write("我爱北京\n")
f.write("我爱天安门\n") #添加文本
f.seek(0) # 把光标移动到0开头
print(f.readline()) #输出第一行
print(f.tell()) #查看光标的位置
f.close()