Python 全棧之路 檔案file常用操作

2021-10-10 09:55:25 字數 3815 閱讀 1378

目錄小知識

檔案模式操作r

以讀方式開啟(預設)

ru 或者 u

以讀方式開啟,同時提供通用換行符支援

w以寫方式開啟,必要時清空

a以追加模式開啟,從eof開始,必要時建立新的檔案

r+以讀寫方式開啟

w+以讀寫模式開啟

a+以讀寫模式開啟

rb以二進位制讀模式開啟

wb以二進位制寫模式開啟

ab以二進位制追加模式開啟

rb+以二進位制讀寫模式開啟

wb+以二進位制讀寫模式開啟

ab+以二進位制讀寫模式開啟

檔案物件方法

操作file.close()

關閉檔案

file.fileno()

檔案描述符

file.flush()

重新整理檔案的內部緩衝區

file.isatty()

判斷file是否是乙個類tty裝置

file.next()

返回檔案的下一行類似於file.readline()

file.read()

從檔案讀取size個位元組,當未給定或給定負值的時候,讀取剩餘的所有位元組,飯後作為字串返回

file.readinto(buf,size)

讀取size個位元組到檔案緩衝器中

file.readline(size)

從檔案中讀取並返回一行(包括行結束符),或返回最大size個字元

file.readlines(sizhint=0)

讀取檔案的所有行並作為乙個列表返回(包含所有行的結束符);如果給定了sizhint且大於0,那麼將返回總和大約為sizhit位元組的行(大小由緩衝器容量的下乙個值決定)(比如說緩衝器的大小只能為4k的倍數,如果sizhint的值為15k則返回的可能是16k)

file.seek(off,whence=0)

在檔案中移動檔案指標,從whence(0代表檔案開始,1代表當前位置,2代表檔案末尾)偏移off位元組

file.tell()

返回當前檔案中的位置

file.truncate(size=file.tell())

擷取檔案到最大size位元組,預設為當前檔案位置

file.write()

向檔案寫入字串

file.writelines()

向檔案寫入字串序列seq

檔案物件屬性

操作file.closed

表示檔案已經被關閉,否則為false

file.encoding

檔案編碼

file.mode

開啟模式

file.name

檔名file.newlines

表示檔案所採用的分隔符

file.softspace

為0表示在輸出一資料後,要再加上乙個空格符,為1表示不加,這個屬性一般用不到

檔案操作:開啟-操作-關閉

「+」表示可以同時讀寫某個檔案 

「u」表示讀取時,\r,\n,\r\n自動換成\n 

"""春宮曲.txt

春宮曲唐代:王昌齡

昨夜風開露井桃,未央前殿月輪高。

平陽歌舞新承寵,簾外春寒賜錦袍。

"""f = open("春宮曲.txt", encoding="utf-8") # 檔案控制代碼

print(f.read()) # 讀取全部內容

f.close()

"""報錯:

unicodedecodeerror: 'gbk' codec can't decode byte 0xae in position 4:

illegal multibyte sequence

設定:encoding="utf-8"

"""

f = open("春宮曲.txt", "w", encoding="utf-8")  # 指定編碼

poetry = """春宮曲

唐代:王昌齡

昨夜風開露井桃,未央前殿月輪高。

平陽歌舞新承寵,簾外春寒賜錦袍。

"""f.write(poetry) # 寫入

f.close()

f = open("春宮曲.txt", "a", encoding="utf-8")

f.write("好詩好詩!") # 在檔案末尾追加寫入

f.close()

f = open("春宮曲.txt", "r+", encoding="utf-8")

# 只適合讀取小檔案,會轉為列表(low loop,不推薦)

for index, line in enumerate(f.readlines()):

if index == 1: # 不列印檔案第二行

print("我是分割線".center(30, "*"))

continue

print(line.strip()) # 去除兩側空格和換行

f.write("寫入內容,不會報錯!")

f.close()

f = open("春宮曲.txt", "r+", encoding="utf-8")

# high biger,推薦

count = 0 # 計數器

for line in f: # f是乙個迭代器

count += 1

if count == 2: # 如果是第二行

print("--------")

continue

print(line.strip())

f.close()

f = open("春宮曲.txt", "r+", encoding="utf-8")

print(f.tell()) # 檔案指標位置 ->0

print(f.readline()) # ->春宮曲

print(f.tell()) # ->11

f.seek(0) # 將檔案指標移到檔案首

print(f.tell()) # ->0

print(f.readline()) # ->春宮曲

print(f.fileno()) # 檔案的描述符 ->3

print(f.mode) # 開啟模式 ->r+

print(f.closed) # 是否關閉 ->false

print(f.encoding) # 檔案編碼 ->utf-8

print(f.buffer) # -><_io.bufferedrandom name='春宮曲.txt'>

print(type(f.newlines),f.newlines.encode("utf-8")) # 檔案換行符

# ->b'\r\n'

print(f.isatty()) # 檢測檔案是否連線到乙個終端裝置 ->false

f.truncate(10) # 截斷

f.flush() # 將快取內容刷入硬碟

# f.write("在增加點內容吧")

f.close()

f = open("春宮曲.txt", "rb+")  # 二進位制讀寫的時候,不能指定編碼

print(f.read()) # ->b'\xe6\x98\xa5\xe5\xae\xab\xe6\x9b\xb2\r'

f.write("我愛北京天安門".encode("utf-8")) # 字串轉為位元組再寫入

f.close()

windows命令列下,切換碟符

c:\>d:

Python全棧之路基礎

2.x的預設編碼是assic,預設不支援中文。而3.x的預設編碼是unicode,預設支援中文 3.x不相容2.x,新特性只在3.x上有 3.x的核心語法更加簡單易學 變數的命名規則 要具有描述性 變數名只能 數字,字母組成,不可以是空格或特殊字元 不能以中文為變數名 不能以數字開頭 不能被使用保留...

Python全棧之路Day17

初次編輯2017年10月13日,星期五 摘要一.檔案基本操作 二.檔案操作練習 作業今日總結 引用 py西遊攻關之基礎資料型別 檔案操作流程 開啟檔案 open 讀操作for line in f.readlines 會把檔案所有都放進記憶體中 for line in f 其中f為可迭代物件,不會把所...

Python全棧之路Day12

初次編輯2017年9月29日 9 15 21 摘要一.字元編碼 二.資料型別 三.流程控制 作業今日總結 引用 alex 字元編碼 字串 列表的增刪改查 for while迴圈 ascii碼 unicode str int 整形 long 長整型 list dict set float 浮點型 多行...