python3.7 檔案操作

蒙古草原狼發表於2018-08-21
#!/usr/bin/env python 
__author__ = "lrtao2010" 

#python3.7 檔案操作


# r   只讀,預設開啟方式,當檔案不存在時會報錯
# w   只寫,當檔案不存在時會自動建立檔案,檔案內容只能是字串,只能寫入字串
# r+  可讀可寫,當檔案不存在時會報錯
# w+  可讀可寫。當檔案不存在時會新建
# a   追加檔案,不可讀
# a+  追加檔案,可讀可寫
# rb  以二進位制讀模式開啟,只可讀
# rb+ 以二進位制寫讀寫模式開啟,可讀可寫,當檔案不存在時報錯
# wb  以位進位制寫模式開啟,只可寫
# wb+ 以二進位制讀寫模式開啟,可讀可寫。當檔案不存在時新建
# ab  以二進位制追加模式開啟,追加檔案,不可讀
# ab+ 以二進位制讀寫模式開啟,追加檔案。可讀可寫

# with open("file.txt",`w`,encoding=`utf-8`) as f:
#     print(f.readable())
#     print(f.writable())
#     False
#     True
# with open("file.txt",`r`,encoding=`utf-8`) as f:
#     print(f.readable())
#     print(f.writable())
#     True
#     False
# with open("file.txt",`r+`,encoding=`utf-8`) as f:
#     print(f.readable())
#     print(f.writable())
#     True
#     True
# with open("file.txt",`a`,encoding=`utf-8`) as f:
#     print(f.readable())
#     print(f.writable())
#     False
#     True
# with open("file.txt",`a+`,encoding=`utf-8`) as f:
#     print(f.readable())
#     print(f.writable())
#     True
#     True

# f= open("file1.txt",encoding=`utf-8`)#不寫encoding,預設問作業系統編碼
# file_data=f.read() #完全讀取
# print(file_data)
# f.close() #需要執行關閉操作
# 1111
# 222
# 333
# 44
# 5555
# 666
# 你好!
# hello

# with open("file.txt",encoding=`utf-8`)as f:
#     file_data=f.read()
#     print(file_data)  #不需要執行close(),系統會自動關閉。
# 1111
# 222
# 333
# 44
# 5555
# 666
# 你好!
# hello

# with open("file.txt",encoding=`utf-8`)as f:
#     print(f.readable()) #判斷是否可讀
#     print(f.writable()) #判斷是否可寫
#     print(1, f.readline()) #一次只讀一行
#     print(2, f.readline())
#     print(3, f.readline())
#     print(4, f.readline())
#     print(5, f.readline())
#     print(6, f.readline())
#     print(7, f.readline())
#     print(8, f.readline())
# True
# False
# 1 1111
#
# 2 222
#
# 3 333
#
# 4 44
#
# 5 5555
#
# 6 666
#
# 7 你好!
#
# 8 hello


#with open("file.txt",encoding=`utf-8`)as f:
#    print(f.readlines()) #將檔案內容讀取到列表中
#   [`1111
`, `222
`, `333
`, `44
`, `5555
`, `666
`, `你好!
`, `hello`]
#     for i in f.readlines():
#         print(i)
#         1111
#
#         222
#
#         333
#
#         44
#
#         5555
#
#         666
#
#         你好!
#
#         hello

# with open(`file.txt`,`r`,encoding=`utf-8`,newline=``) as f:
# #     print(f.readlines())
# #     [`1111
`, `222
`, `333
`, `44
`, `5555
`, `666
`, `你好!
`, `hello`]
#     for i in f.readlines():
#         print(i,end=``) #不列印換行符
#         1111
#         222
#         333
#         44
#         5555
#         666
#         你好!
#         hello

# with open(`file.txt`,`w+`,encoding=`utf-8`) as f: #原檔案被清空後重新寫入
#     f.write(`a
`)
#     f.write(`b
c
`)
#     f.writelines([`d
`, `e
`])
#     f.seek(0) #將指標seek到0位置,否則讀不出資料
#     print(f.read())
#     # a
#     # b
#     # c
#     # d
#     # e

# with open(`file.txt`,`r+`,encoding=`utf-8`) as f: #從指標位置所在處寫入寫入
#     print(f.readline())
#     f.write(`a
`)
#     f.write(`b
c
`)
#     f.writelines([`d
`, `e
`])
#     f.seek(0) #將指標seek到0位置,否則讀不出資料
#     print(f.read())
#     # 1111
#     #
#     # 1111
#     # 222
#     # 333
#     # 44
#     # 5555
#     # 666
#     # 你好!
#     # helloa
#     # b
#     # c
#     # d
#     # e

# with open(`file.txt`,`a+`,encoding=`utf-8`) as f:
#     f.write(`寫到檔案最後`)
#     f.seek(0)
#     print(f.read())
#     # 1111
#     # 222
#     # 333
#     # 44
#     # 5555
#     # 666
#     # 你好!
#     # hello寫到檔案最後

# with open(`file.txt`,`a+`,encoding=`utf-8`) as f:
#     print(f.encoding) #檢視檔案編碼
#     #utf - 8

# #`字串`---------encode---------》bytes
# #bytes---------decode---------》`字串`

# with open(`file.txt`,`rb`) as f: #b模式不能指定編碼
#     file_data=f.read()
#     print(file_data)
#     print(file_data.decode(`utf-8`))
#     # b`1111
222
333
44
5555
666
xe4xbdxa0xe5xa5xbd!
hello`
#     # 1111
#     # 222
#     # 333
#     # 44
#     # 5555
#     # 666
#     # 你好!
#     # hello

# with open(`file.txt`,`wb+`) as f:
#     file_data = `test wb`
#     f.write(file_data.encode(`utf-8`))
#     f.seek(0)
#     print(f.read())
#     # b`test wb`

# flush() 檔案內容從記憶體刷到硬碟
# tell()  檢視檔案當前游標位置
# seek(3) #從開頭開始算,將游標移動到第三個位元組
          #seek 有三種工作方式,seek(offset[, whence])
          #seek(2,0)=seek(2),0是預設方式,相當於從0位元組位置開始
          #seek(2,1)   1 相對當前位置
          #seek(-2,2)  2 從檔案末尾開始
# truncate(10) #從開頭開始算,將檔案只保留從0-10個位元組的內容,檔案開啟方式必須包含"寫",
               #但是w和w+除外,因為這兩種方式會首先把檔案清空。
# with open(`file.txt`,`ab`) as f:
#     f.truncate(1)


#列印檔案最後一行
# with open("file.txt",`rb`) as f:
#     for i in f:   #這種方式不會讀取整個檔案,需要從哪裡讀取才從哪裡開始讀取,迴圈檔案的推薦方式
#         offs=-5         #偏移量,根據一行大小確定
#         while True:
#             f.seek(offs,2)
#             data=f.readlines()
#             if len(data) > 1:
#                 print(`這是最後一行:`,data[-1].decode(`utf-8`))
#                 break
#             offs*=2

# 這是最後一行: hello你好!hello你好!hello你好!hello你好!