第九章 Python3_文件操作之讀寫

一、 文件操作流程

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


二、 Python 中如何實現(xiàn)

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

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

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

f_obj = open('a.txt', 'r', encoding='utf-8')

  1. 通過句柄對文件進(jìn)行操作
data = f_obj.read()
print(data)

  1. 關(guān)閉文件
f_obj.close()

字符編碼的問題

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

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



三、 文件打開模式

打開文件的模式有:

1. 文本方式操作

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

2. 字節(jié)方式操作

b 表示以字節(jié)的方式操作,不需要編碼的參數(shù) encoding

  • rb 字節(jié)方式讀取
  • wb 字節(jié)方式寫入,清空原文件內(nèi)容
  • ab 字節(jié)方式的追加寫入

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



四、文件操作

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()

# 一次讀完,把每一行的內(nèi)容放在列表中,成為列表中的一個元素
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 內(nèi)容

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

# 定義 bytes 內(nèi)容, 兩種方式都可以
b1 = bytes('你好\n', encoding='utf-8')
b2 = '廣州\n'.encode('utf-8')

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

3. for 循環(huán)文件對象

>>> file_name = './a.txt'
>>> f_obj = open(file_name, 'r')
>>> for line in f_obj:
...     print(line)
...
hello

world

>>>f_obj.close()

In [10]: f = open('a.txt', 'w', encoding='utf-8')

In [11]: for i in ['name', 'shark']:
    ...:     print(i)
    ...:
name
shark

In [12]: for i in ['name', 'shark']:
    ...:     f.write("{}\n".format(i))
    ...:

In [13]: f.close()

In [14]: !cat a.txt
name
shark

4. 其他方法和屬性

f.name                 # 文件名
f.closed               # 文件是否關(guān)閉

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



源數(shù)據(jù)

觀察下面的數(shù)據(jù),完成下面的需求。

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
# 你只需要復(fù)制上面的一行數(shù)據(jù)即可,千萬不要復(fù)制此行以及下面的一行
#

需求:

注意上面的源數(shù)據(jù)是分為好幾個部分的。把每個部分分別寫在每個文件中。
每個部分的文件名稱為 symbol 鍵對應(yīng)的值。
比如上面示例中,文件名應(yīng)該是: BCHBTC, 并且每個文件的擴(kuò)展名均為: .yml 結(jié)尾。
示例結(jié)果:
文件名: BCHBTC.yaml 部分內(nèi)容如下

symbol: BCHBTC
baseCoin: BCH

文件名: QTUMUSDT.yaml 部分內(nèi)容如下

symbol: QTUMUSDT
baseCoin: QTUM

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容