文件操做

文件的操做

w = open('1.txt', 'w', encoding='utf--8')
w.write('000\n')
#在寫入大量數據,要及時處理內存空間,否則內存可能溢出致使數據丟失
#flush:1.將內存中的數據刷新到硬盤中;2.釋放文件資源
w.flush()
w.write('111\n')
# 最後一次flush()操做可省略
w.flush()

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

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('慢慢傳去吧!')
相關文章
相關標籤/搜索