文件操作

文件的操作

w = open('1.txt', 'w', encoding='utf--8')
w.write('000
')
#在写入大量数据,要及时处理内存空间,不然内存可能溢出导致数据丢失
#flush:1.将内存中的数据刷新到硬盘中;2.释放文件资源
w.flush()
w.write('111
')
# 最后一次flush()操作可省略
w.flush()

# 一次输入多行
w.writelines(['asd
', 'aeqwead
'])

w.close()

with open('文件', '模式', encoding='utf-8') as f:
    # 操作
    pass

newlines   # 读取一个字节,如果是行/文件等结束标识,就返回值,否则返回None

文件的操作模式

'''
    r : 读
    w : 写(无创建,有清空)
    a : 追加(有创建功能)

    t : 文本操作(默认模式)
    b : 非文本文件必须采用二进制模式
    + :可读可写

    r+ : 不创建文件的可读可写  | w+:创建清空文件的可读可写   |   a+"创建不清空文件(追加)的可读可写
    rb : 二进制读 | wb 创建清空文件的二进制写  | ab :创建不清空文件(追加)的二进制写
    rb+   |    wb+  |     ab+

    x :创建文件,如果文件已存在就抛异常
    U :已被抛弃不用

'''

# with open 语法进行文件复制(边读边写赋值)
# 复制文本类文件
with open('source.txt', 'rt', encoding='utf-8') as f1:
    with open('target.txt', 'a+', encoding='utf-8') as f2:
        for line in f1:
            f2.write(line)
            
            
# 复制非文本类型的数据文件
# 从模式采用b模式
with open(r'source.mps','rb') as f1,
    open(r'target.mp4','wb+') as f2:  # rb+/wb/wb+/ab/ab+
    for line in f1:
        f2.write(line)

文件游标操作

# 游标  必须在b模式下操作,seek中偏移的是字节
'''
1.如何使用游标:游标的相关方法
2.游标相关的读写操作
3.根据游标在大文件中取出多个指定位置的部分字节内容
'''

# 游标读:
# 方法: seek(偏移量,偏移位置)
# 偏移量:移动的字节数
# 偏移位置:0 - 从文件开始位置开始偏移 | 1 - 从当前游标位置开始偏移  | 2 - 从文件末尾开始偏移
with open('source.txt','rt',encoding='utf-8') as f:
    d1 = f.read()
    print(d1)

    #打印游标当前位置
    print(f.tell())

    # 游标操作:从头开始
    f.seek(0,0)
    d2 = f.read()
    print(d2)

    # 游标操作:从当前位置开始
    f.seek(3,1)
    d3 = f.read()
    print(d3)

    # 游标操作:从末尾开始
    f.seek(-5,2)
    d4 = f.read()
    print(d4)


# 游标写:(会覆盖书写)
with open('source.txt','rb+') as f:
    f.seek(11)
    f.write(b'0000')   # 写入的内容必须是b字符串,会覆盖后面的内容

# 文件秒传
# 在大文件中,开头 | 1/3 | 2/3 | 末尾 各取10个字节拼接成秒传的信息依据
tagdata = b''
with open(r'001.png', 'rb') as f:
    data = f.read()
    length = len(data)
    # 开头
    f.seek(10, 0)
    d1 = f.read(10)
    # 1/3
    f.seek(length // 3, 0)
    d2 = f.read(10)
    # 2/3
    f.seek(length // 2 * 3,0)
    d3 = f.read(10)
    # 末尾
    f.seek(-10,2)
    d4 =f.read(10)
tagdata = d1+d2+d3+d4

newdata = b''
with open(r'002.png','rb') as f:
    data = f.read()
    length = len(data)
    f.seek(0,0)
    newdata += f.read(10)
    f.seek(length//3,0)
    newdata += f.read(10)
    f.seek(length//3*2)
    newdata += f.read(10)
    f.seek(-10,2)
    newdata +=f.read(10)

if newdata == tagdata:
    print('秒传成功')
else:
    print('慢慢传去吧!')
原文地址:https://www.cnblogs.com/penghengshan/p/10607481.html