python 文件处理

模式种类

r     打开只读文件,该文件必须存在。 

r+   打开可读写的文件,该文件必须存在。

rb   以二进制读取

 

w   打开只写文件,若文件存则全部清空,若文件不存在则建立该文件。 

w+      打开可读写文件,若文件存则全部清空,若文件不存在则建立该文件。 

wb    以二进制写入

 

a   附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,后面添加

a+    附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,后面添加,读取的时候也是从后面开始读

ab  以二进制附加

 

 

demo.txt


昨夜雨疏风骤,浓睡不消残酒。
试问卷帘人,却道海棠依旧。
知否,知否,应是绿肥红瘦。

用法

readline()  读取一行

with open("demo.txt","r",encoding="utf-8") as f:
    print(f.readline())
    print(f.readline())

结果:

昨夜雨疏风骤,浓睡不消残酒。

试问卷帘人,却道海棠依旧。

 

他会根据当前的光标继续向下

 

 

readlines()  读取多行

with open("demo.txt","r",encoding="utf-8") as f:
    print(f.readlines())

结果:

['昨夜雨疏风骤,浓睡不消残酒。\n', '试问卷帘人,却道海棠依旧。\n', '知否,知否,应是绿肥红瘦。']

以列表形式返回

但这样存储,会占相应的内存

 

 

tell()  获取当前光标位置

with open("demo.txt","r+",encoding="utf-8") as f:
    print(f.tell())  # 0
    read = f.read(1)
    print(f.tell())  # 3

 一个中文占3个字节,所以读取一个字符,光标是 3

 

 

seek()  调整光标位置

with open("demo.txt","r+",encoding="utf-8") as f:
    r = f.readline()
    print(r.strip()) # 昨夜雨疏风骤,浓睡不消残酒。
    print(f.tell()) # 44
    
    f.seek(0)
    r = f.readline() 
    print(r.strip()) # 昨夜雨疏风骤,浓睡不消残酒。

 

 

flush()  更新

将缓存里的数据转到磁盘

进度条:

因为终端也是一个文件,也可以调用 flush()

import sys
import time
for i in range(20):
    # 操作终端
    sys.stdout.write("*")
    # 将缓存的数据更新到终端
    sys.stdout.flush()
    time.sleep(0.1)

 

 

truncate()  截断

参数(保留的字节数),不写参数会截断所有

with open("demo.txt","a",encoding="utf-8") as f:
    f.truncate(12) # 昨夜雨疏

截断12个字节,却只有4个字符,因为一个中文占3个字节

 

 

其他操作

   # 是否是终端
    print(f.isatty())
    # 是否可读
    print(f.readable())
    # 是否可写
    print(f.writable())

 

 

内存处理

with open("demo.txt","r+",encoding="utf-8") as f:

# 这是for内部将f对象做成一个迭代器,用的时候一行一行的取
    for i in f: 
        print(i.strip())

 

 

更新文件

最好的方法就是,再写一份

with open("demo.txt","r",encoding="utf-8") as f,open("demo备份.txt","w",encoding="utf-8") as n:
        n.write("李清照\n")
        num = 0
        for i in f:
            num += 1
            if  num == 2:
                i = "".join([i.strip(),("这是插入的内容\n")])
            n.write(i)

 

李清照
昨夜雨疏风骤,浓睡不消残酒。
试问卷帘人,却道海棠依旧。这是插入的内容
知否,知否,应是绿肥红瘦。
posted @ 2019-04-23 15:23  Sun先生  Views(253)  Comments(0Edit  收藏  举报