day007 邁向大神之路---檔案
阿新 • • 發佈:2018-11-09
檔案操作
小知識
- 檔案路徑
絕對路徑 從原始到目的
相對路徑 當前執行的檔案路徑 - 編碼方式
- 操作方式 只讀 只寫 讀寫 寫讀…
以什麼編碼儲存 就以什麼開啟檔案讀取
1.讀取 只讀:r rb(不應編碼開啟 非文字類)
#讀取的操作
f=open('d:\1.txt',mode='r',encoding='utf-8') #以絕對路徑開啟
f=open('1.txt',mode='r',encoding='utf-8')#以相對路徑開啟
content=f.read()
print(content)
f. close()
2.只寫: w wb 沒有此檔案 就會建立此檔案 (覆蓋)
#寫入檔案
f=open('125',mode='w',encoding='utf-8')
f.write("高崎")
f.close()
#寫入二進位制檔案
f=open('125',mode='wb')
f.write("hello".encode('utf-8')) #以utf-8寫入
f.close()
3. 追加 a ab
f=open('125',mode='a',encoding='uttf-8')
f.write("wangzhen")
f.close( )
f=open('125',mode='ab')
f.write("wangzhen".encode('utf-8'))
f.close()
4. 讀寫 r+b 先讀後寫
+號多種操作不會報錯
f=open(‘125’,mode=‘r+’,encoding=‘uttf-8’) #(# 常用r+)
f.read()
f.write()
f.close()
只能進行2步 指的是 f.read() 和f.write()才做
mode 從某種方式是開始讀的行數 +號多種操作不會報錯
f.write(‘aaaa’)
f.seek(0)print(f.read()) #會不顯示 因為游標移到最後面了
f.close()
5. 寫讀 w+b
f=open(‘125’,mode=‘w+’,encoding=‘utf-8’)
其他方式(補充)
read 字元
- read(3) #只讀3個字元 對出來的都是字元
- f.seek() #按照位元組找的 1箇中文字元3個位元組 f.seek(count-3)
- f.tell() #游標在哪 斷點續傳 按照位元組找的 1箇中文字元3個位元組
- f.readable() 是否可讀
- f.readline() #按照行讀取
- f.readlines() #每一行當成列表中的一個元素
- f.truncate(1,2) #原始檔擷取
讀取方式:
for line in f: #一行一行讀
print(line)
f.close()
with open('125',mode='r+',encoding='uttf-8') as obj:
print(obj.read()) #檔案自動關閉 @!!!有縮排
#可以同時開啟2個檔案 並進行操作(常用)
with open('125',mode='r+',encoding='uttf-8') as obj, open('125',mode='w+',encoding='uttf-8') as f1:
print(obj.read()) #有縮排
ps 案列 註冊+賬號密碼與檔案匹配(輸入3次 失敗)
# username=input("請輸入你的名字")
# passwd=input("請輸入你的密碼")
# with open('info',mode='w+',encoding='utf-8') as f:
# f.write('{}\n{}'.format(username,passwd))
# print("恭喜你註冊成功!")
lis=[]
i=0
while i < 3 :
uname = input("請輸入你的名字")
pwd = input("請輸入你的密碼")
with open('info', mode='r+', encoding='utf-8') as f1:
for line in f1:
lis.append(line)
if uname==lis[0].strip() and pwd==lis[1].strip():
print("登入成功")
break
else:
print("請輸入正確的密碼")
i+=1
編碼之間相互轉換
str —>byte encode 編碼
s = ‘二哥’
b = s.encode(‘utf-8’)
print(b)
#byte —>str decode 解碼
s1 = b.decode(‘utf-8’)
print(s1)
#byte —>str encode 編碼
s = ‘abf’
b = s.encode(‘utf-8’)
print(b)
#byte —>str decode 解碼
s1 = b.decode(‘gbk’)
print(s1)