文件操作之讀寫

一、 文件操作流程

  1. 打開文件,得到文件的對象(句柄)
  2. 通過文件對象(句柄)操作文件
  3. 保存並關閉文件


二、 Python 中如何實現

python中使用open() 函數來操作文件。

  1. 打開文件,得到文件句柄,並把一個變量名分配給這個文件句柄

變量名 = open('文件路徑', '打開模式', encoding = '字符編碼')

f_obj = open('a.txt', 'r', encoding='utf-8')
  1. 通過句柄對文件進行操作
data = f_obj.read()
print(data)
  1. 關閉文件
f_obj.close()

字符編碼的問題

f=open(...) 是由操作系統打開文件,那麼如果我們沒有指定編碼,那麼打開文件的默認編碼很明顯是操作系統說了算,操作系統會用自己的默認編碼去打開文件,默認情況下,在 windows 下是 gbk,在 linux 下是 utf-8

若要保證不亂碼,文件以什麼方式存儲的,就要以什麼方式打開。



三、 文件打開模式

打開文件的模式有:

1. 文本方式操作

  • r 只讀模式【默認】
  • w 只寫模式【不可讀;不存在則創建;存在則清空原來的內容再寫新內容;】
  • a 追加模式【不可讀;不存在則創建;存在則以追加的方式寫入新的內容;】

2. 字節方式操作

b 表示以字節的方式操作,不需要編碼的參數 encoding

  • rb 字節方式讀取
  • wb 字節方式寫入,清空原文件內容
  • ab 字節方式的追加寫入

注意:以b方式打開時,讀取到的內容是字節類型,寫入時也需要提供字節類型



四、文件操作

1. 讀操作

f_obj = open('./a.txt', 'r')

# 讀全部
content = f_obj.read()
print(content)

# 每次讀一行
line1 = f_obj.readline()

line2 = f_obj.readline()

line3 = f_obj.readline()


# 一次讀完,把每一行的內容放在列表中,成爲列表中的一個元素
line_list = f_obj.readlines()

2. 寫操作

a. 寫普通的文本

f_obj = open('a.txt', 'w')

# 針對文本模式的寫,需要自己寫換行符
f_obj.write('楊哥\n')
f_obj.write('千鋒\n')
f_obj.close()

b. 寫 bytes 內容

f_obj = open('b.txt', 'wb')

# 定義 bytes 內容, 兩種方式都可以
b1 = bytes('千鋒\n', encoding='utf-8')
b2 = '楊哥\n'.encode('utf-8')

# 可以用 writelines() 一次性寫入多行
f_obj.writelines([b1, b2])
f_obj.close()

3. 其他方法和屬性

f.name                 # 文件名
f.closed               # 文件是否關閉

f.readable()           # 文件是否可讀
f.writable()           # 文件是否可寫
f.flush()              # 立刻將文件內容從內存刷到硬盤


作業

源數據

觀察下面的數據,完成下面的需求。

symbol=BCHBTC;baseCoin=BCH;quoteCoin=BTC;baseAccountNormal=201104;baseAccountLock=202104;quoteAccountNormal=201101;quoteAccountLock=202101;sysUid=1;sysBaseAccount=101015;sysQuoteAccount=101016;feeCoin=YLB;useFeeCoin=false;feeAccountNormal=201109;sysFeeAccount=101025;useFeeByAward=false;feeAccountAward=206109-symbol=QTUMUSDT;baseCoin=QTUM;quoteCoin=USDT;baseAccountNormal=201143;baseAccountLock=202143;quoteAccountNormal=201106;quoteAccountLock=202106;sysUid=1;sysBaseAccount=101360;sysQuoteAccount=101361;feeCoin=YLB;useFeeCoin=false;feeAccountNormal=201109;sysFeeAccount=101362;useFeeByAward=false;feeAccountAward=206109-symbol=BCHUSDT;baseCoin=BCH;quoteCoin=USDT;baseAccountNormal=201104;baseAccountLock=202104;quoteAccountNormal=201106;quoteAccountLock=202106;sysUid=1;sysBaseAccount=101015;sysQuoteAccount=101016;feeCoin=YLB;useFeeCoin=false;feeAccountNormal=201109;sysFeeAccount=101025;useFeeByAward=false;feeAccountAward=206109-symbol=BOTBTC;baseCoin=BOT;quoteCoin=BTC;baseAccountNormal=201145;baseAccountLock=202145;quoteAccountNormal=201101;quoteAccountLock=202101;sysUid=1;sysBaseAccount=101121;sysQuoteAccount=101122;feeCoin=YLB;useFeeCoin=false;feeAccountNormal=201109;sysFeeAccount=101123;useFeeByAward=false;feeAccountAward=206109-symbol=ETHBTC;baseCoin=ETH;quoteCoin=BTC;baseAccountNormal=201102;baseAccountLock=202102;quoteAccountNormal=201101;quoteAccountLock=202101;sysUid=1;sysBaseAccount=101011;sysQuoteAccount=101012;feeCoin=YLB;useFeeCoin=false;feeAccountNormal=201109;sysFeeAccount=101023;useFeeByAward=false;feeAccountAward=206109
# 你只需要複製上面的一行數據即可,千萬不要複製此行以及下面的一行
#

需求:

注意上面的源數據是分爲好幾個部分的。把每個部分分別寫在每個文件中。
每個部分的文件名稱爲 symbol 鍵對應的值。
比如上面示例中,文件名應該是: BCHBTC, 並且每個文件的擴展名均爲: .yml 結尾。
示例結果:
文件名: BCHBTC.yaml 部分內容如下

symbol: BCHBTC
baseCoin: BCH

文件名: QTUMUSDT.yaml 部分內容如下

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