2018-11-26 python學習第九天

x='上'

#unicode的二進制------編碼encode------->gbk格式的二進制
res=x.encode('gbk')

res=x.encode('utf-8')

print(res,type(res))

#unicode的二進制<------解碼decode-------gbk格式的二進制
m=res.decode('gbk')
print(m)

'''

  1. 什麼是文件
    文件是操作系統爲應用程序或者用戶提供一種操作硬盤的虛擬單位
    強調:
    文件是操作系統提供的虛擬單位
    應用程序或者用戶對文件的讀寫操作其實都是向操作系統發送指令

  2. 爲何要用文件
    文件對應的硬盤空間,如果需要考慮永久保存數據那必須使用文件

  3. 如何用文件
    '''

    路徑問題

    絕對路徑:

    win: C:\a\b\c\d.txt

    linux: /a/b/c/d.txt

    相對路徑: 相對於當前執行文件所在文件夾

    a/b/c/d.txt

#1 打開文件

f=open(r'D:\脫產5期內容\day09\a.txt',mode='rt',encoding='utf-8') #前面加個r就是讓他不要轉義

print(f)

#2 讀/寫文件

data=f.read()

print(data)

#3 關閉文件

f.close() # 向操作系統發送指令,讓操作系統關閉打開的文件,回收操作系統資源

print(f)

f.read()

上下文管理

with open('a.txt',mode='rt',encoding='utf-8') as f: #with .... as 就是不用在自己輸入f.close()了
data=f.read()
print(data)

    # 一. 基本介紹

控制文件讀寫操作的模式

r(默認)

w

a

控制文件讀寫內容的模式(不能單獨使用,必須與r、w、a連用)

t(默認)

b

二. 詳細介紹

控制文件讀寫操作的模式

r(默認):只讀模式,以該模式打開文件,當文件不存在時則報錯,當文件存在時文件指針在文件開頭

with open('a.txt',mode='rt',encoding='utf-8') as f:

# data=f.read()
# print(f.readable())        #這個就是檢測這個模式是不是可讀
# print(f.writable())        #這個就是檢測這個模式是不是可寫

# line=f.readline()
# print(line,end='')
#
# line = f.readline()       #這個是一行一行讀
# print(line,end='')
#
# print('第三次讀')
# line = f.readline()
# print(line, end='')
# print(data,type(data))

# for line in f:
#     print(line)

# print(f.readlines())      #這個是吧裏面的東西打印爲列表的形式,readlins也是吧全部內容讀出來
# pass

w: 只寫模式,以該模式打開文件,當文件不存在時創建一個空文檔,當文件存在時清空文件內容,文件指針在文件開頭

with open('a.txt',mode='wt',encoding='utf-8') as f:

# print(f.readable())       #檢測上面這行代碼是否可讀
# print(f.writable())       #檢測上面這行代碼是否可寫

# 在打開了文件不關閉的情況下,連續的寫入,新寫的內容總是跟在老內容之後
# f.write('你瞅啥\n')
# f.write('瞅你那熊樣\n')
# f.write('巴拉巴拉。。。\n')

# lines=['1111\n','2222\n','3333\n']
# for line in lines:
#     f.write(line)
# f.writelines(lines)           #writelines 就是for循環的調用

# f.write('aaaa\nbbb\ncccc\n')

a: 只追加寫模式,以該模式打開文件,當文件不存在時創建一個空文檔,當文件存在時不清空文件內容,文件指針跳到文件末尾

with open('c.txt',mode='at',encoding='utf-8') as f:

# f.write('你好阿斯蒂芬\n')
# f.write('adfasdf\n')

# f.writelines([1,2,3])

控制文件讀寫內容的模式(不能單獨使用,必須與r、w、a連用)

t(默認):無論讀寫都是以字符爲單位的,只能操作文本文件,必須指定encoding參數

b:無論讀寫都是以bytes爲單位的,可以操作所有文件,一定不能指定encoding參數

with open('a.txt',mode='rb') as f:

data=f.read()

print(data,type(data))

# print(data.decode('utf-8'))

with open('01.mp4',mode='rb') as f:

data=f.read()

print(data,type(data))

with open('a.txt',mode='wb') as f:

f.write('字符行啊士大夫阿斯蒂芬撒旦發'.encode('utf-8'))

練習:拷貝文件小程序

with open('01.mp4',mode='rb',) as read_f,\

open(r'D:\1111.mp4',mode='wb') as write_f:

data=read_f.read()

write_f.write(data)

瞭解:

+:不能單獨使用,必須與rwa連用,r+ w+ a+

with open('a.txt','r+t',encoding='utf-8') as f:

print(f.readable())

print(f.writable())

#

data=f.readline()

print(data)

f.write('劉清蒸')

with open('a.txt','r+t',encoding='utf-8') as f:

print(f.readable())

# print(f.writable())

f.seek(10)
# print(f.tell())
f.write('你好啊')

    # 方式一:

1. 以讀的方式打開源文件

2. 將文件內容一次性全讀入內存,在內存完成修改

3. 以寫的方式打開源文件,然後將修改後的結果一次性寫入源文件

總結:

優點:在文件修改過程中硬盤只存在一份數據

缺點:浪費內存

with open('b.txt',mode='rt',encoding='utf-8') as f1:
msg=f1.read()
new_msg=msg.replace('alex','大SB')

with open('b.txt',mode='wt',encoding='utf-8') as f2:
f2.write(new_msg)

方式二

1. 以讀的方式打開源文件,以寫的方式打開一個臨時文件

2. 讀取源文件的一行內容到內存中,將修改的結果寫入臨時文件,循環往復直到改

3. 刪除源文件,將臨時文件重命名爲源文件名

優點:同一時間在內存中只有文件的一行內容,更節省內容

缺點:在文件修改過程中硬盤只存在兩份數據

import os

with open('b.txt',mode='rt',encoding='utf-8') as read_f,\
open('.b.txt.swap',mode='wt',encoding='utf-8') as write_f:
for line in read_f:
write_f.write(line.replace('大SB','alex'))

os.remove('b.txt')
os.rename('.b.txt.swap','b.txt')

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章