文件处理

文件操作

读文件

文件的处理分为读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()
posted @ 2019-04-25 13:56  海岛cc  阅读(205)  评论(0编辑  收藏  举报