第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

全部開發(fā)者教程

Python 進階應(yīng)用教程

Python 進階應(yīng)用教程
01 Python 的對象和類 02 Python 類屬性和實例屬性 03 Python類的構(gòu)造方法、析構(gòu)方法、實例方法 04 Python 類的私有屬性和私有方法 05 Python 類的繼承和多繼承 06 Python 類實戰(zhàn) 07 Python 中的迭代器實現(xiàn)原理 08 Python 中的迭代器趣味實踐 09 Python 中的生成器實現(xiàn)原理 10 Python 中的生成器趣味實踐 11 Python 中的錯誤和異常 12 Python 中的異常處理 13 Python 中的模塊 14 Python 標準庫之 os 模塊 15 Python 標準庫之 sys 模塊 16 Python 標準庫之 math 模塊 17 Python 標準庫之 random 模塊 18 Python 標準庫之 Json 模塊 19 Python 標準庫 datetime 模塊 20 Python 中的常用第三方模塊 21 Python 中的命名空間 22 Python 中的作用域 23 Python 中的文件 IO 操作 24 Python 基礎(chǔ)實戰(zhàn) 25 Python 內(nèi)置函數(shù) 26 Python 中使用正則表達式 27 使用 Python 操作 MySQL 數(shù)據(jù)庫 28 使用 Python 操作 Mongo 數(shù)據(jù)庫 29 使用 Python 操作 Redis 數(shù)據(jù)庫 30 使用 Python 發(fā)送一封郵件 31 threading 之 Thread 的使用 32 threading 之 Lock 的基本使用 33 Python 生產(chǎn)者消費者模型 34 Python 的內(nèi)存管理與垃圾回收 35 Python 領(lǐng)域運用:網(wǎng)絡(luò)爬蟲 36 Python 領(lǐng)域運用:Web 開發(fā) 37 Python 領(lǐng)域運用:自動化運維 38 Python 領(lǐng)域運用:自動化測試

Python 中的文件 IO 操作

1. 打開和關(guān)閉文件

1.1 打開文件

訪問文件前,需要使用用 Python 內(nèi)置的 open() 函數(shù)打開一個文件:

open(path, access_mode)
  • path 是要訪問的文件的路徑名
  • access_mode 是文件的訪問模式
    • 可以是只讀、讀寫、追加等模式,所有可能的取值見 1.2 小節(jié)
    • 這個參數(shù)是可選的,缺省情況下,是以只讀模式 r 打開文件
  • open 返回一個 file 對象,通過調(diào)用 file 對象的成員方法訪問該文件

使用 open 打開一個文件并訪問:

file = open('test.txt')
line = file.readline()
print(line)
  • 在第 1 行,以只讀方式打開文件 test.txt,open 返回一個 file 對象
  • 在第 2 行,調(diào)用 file 對象的 readline() 方法從文件中讀取一行

1.2 文件的訪問模式

下表列出了常用的文件訪問模式:

模式 描述 如果文件存在 如果文件不存在
r 以只讀方式打開文件 保留原有內(nèi)容,從文件頭部開始讀 拋出異常 FileNotFoundError
r+ 以讀寫方式打開文件 保留原有內(nèi)容,從文件頭部開始讀 拋出異常 FileNotFoundError
w 以只寫方式打開文件 刪除原有內(nèi)容,從文件頭部開始寫入 創(chuàng)建新文件
w+ 以讀寫方式打開文件 刪除原有內(nèi)容,從文件頭部開始讀寫 創(chuàng)建新文件
a 以只寫方式打開文件 保留原有內(nèi)容,從文件尾部開始讀寫 創(chuàng)建新文件
a+ 以讀寫方式打開文件 保留原有內(nèi)容,從文件尾部開始讀寫 創(chuàng)建新文件

1.3 關(guān)閉文件

訪問文件的步驟如下:

  1. 打開文件
  2. 讀寫文件
  3. 關(guān)閉文件

當文件訪問完畢后,不再需要訪問該文件時,需要及時的調(diào)用 file 對象的 close() 方法關(guān)閉文件。以下是及時關(guān)閉文件的例子:

file = open('test.txt')
file.read()
file.close()

2. 文件對象

open 返回一個 file 對象,通過調(diào)用 file 對象的成員方法訪問該文件,下表總結(jié)了 file 對象的成員方法。

成員方法 功能
close() 關(guān)閉文件,關(guān)閉之后便不能再進行寫入
write(string) 將字符串 string 寫入文件
read(count) 從文件中讀取一個字符串,至多讀取 count 個字符
tell() 獲取文件的當前訪問位置
seek(offset, from) 改變文件的當前訪問位置

seek(offset, from) 的功能是根據(jù)參數(shù) offset 和 from 改變當前文件的訪問位置:

  • 參數(shù) offset 表示要移動的字節(jié)數(shù)
  • 參數(shù) from 指定開始移動字節(jié)的參考位置
    • 如果 from 被設(shè)為 0,將文件的開頭作為移動的參考位置
    • 如果 from 被設(shè)為 1,將文件的當前訪問位置作為移動的參考位置
    • 如果 from 被設(shè)為 2,將文件的末尾作為移動的參考位置

3. 應(yīng)用場景

3.1 使用 while 循環(huán)打印文件的每行

假設(shè)文件 test.txt 的內(nèi)容:

www
imooc
com

下面使用 readline() 方讀取文件的每行并打?。?/p>

file = open('test.txt')
while True:
    line = file.readline()
    if line == '':
        break
    print(line, end = '')
file.close()
  • 在第 1 行,以只讀方式打開文件 test.txt
  • 在第 3 行,調(diào)用 readline() 方法讀取文件的一行,讀取的數(shù)據(jù)包括換行
  • 在第 4 行,如果讀取到文件尾部,則返回一個空字符串,此時退出循環(huán)
  • 在第 6 行,缺省情況下 print 輸出時會自動加上換行,因為 readline() 返回的數(shù)據(jù)會包含換行,因此使用命名參數(shù) end = ‘’ 使 print 輸出時不換行

運行程序,程序輸出如下:

www
imooc
com

3.2 使用 for 循環(huán)打印文件的每行

Python 中的 file 對象是一個可迭代對象 Iterable,可以使用 for 循環(huán)遍歷 file 對象。for 循環(huán)遍歷文件的每一行,示例如下:

file = open('test.txt')
for line in file:
    print(line, end = '')
file.close()
  • 在第 2 行,使用 for 循環(huán)遍歷文件 file 的每一行
    • line 指向當前遍歷的行,包括換行符
  • 在第 4 行, 因為 line 包含換行符,因此使用命名參數(shù) end = ‘’ 使 print 輸出時不換行

3.3 復制文件

下面的例子實現(xiàn)復制文件的功能:

def copy(src_path, dst_path):
    src_file = open(src_path, 'r')
    dst_file = open(dst_path, 'w')
    for line in src_file:
        dst_file.write(line)
    src_file.close()
    dst_file.close()

copy('test.txt', 'test.bak')
  • 在第 2 行,以只讀方式打開源文件 src_path
  • 在第 3 行,以只寫方式打開目標文件 dst_path
  • 在第 4 行,遍歷源文件 src_file 的每一行 line
  • 在第 5 行,將 line 寫入到目標文件 dst_file
  • 在第 6 行,及時關(guān)閉 src_file 和 dst_file

3.4 向文件追加內(nèi)容

編寫一個用于記錄日志的函數(shù) log(msg),該函數(shù)將 msg 寫入到日志文件 log.txt 中。每次寫日志文件時,需要:

  • 保留日志文件的原有內(nèi)容
  • 將新的記錄添加到日志文件的尾部

文件 log.py 的內(nèi)容如下:

from datetime import datetime

def log(msg):
    dt = datetime.today()
    now = dt.strftime("%Y-%m-%d %H:%M:%S")
    line = '%s: %s\n' % (now, msg)
    log_file.write(line)

log_file = open('log.txt', 'a')
log('hello')
log('world')
log_file.close()
  • 在第 3 行,編寫函數(shù) log(msg),用于將 msg 追加到日志文件 log.txt
    • 在第 4 行到第 5 行,獲取當前時間 now
    • 在第 6 行,將當前時間 now 和信息 msg 追加到日志文件
  • 在第 9 行,以追加模式 a 打開文件 log.txt
    • 向文件寫數(shù)據(jù)時,數(shù)據(jù)會被追加到文件尾部
  • 在第 10 行,向日志中寫入 hello
  • 在第 11 行,向日志中寫入 world
  • 在第 12 行,關(guān)閉日志文件

運行 log.py,命令如下:

C:\> python log.py
C:\> dir
2020/06/04  11:47    <DIR>          .
2020/06/04  11:47    <DIR>          ..
2020/06/04  11:49               249 log.py
2020/06/04  11:50                56 log.txt
  • 在第 6 行,顯示當前目錄下存在文件 log.txt
    • 以追加模式 a 打開文件 log.txt,如果文件不存在則創(chuàng)建文件

此時文件 log.txt 的內(nèi)容如下,文件中包含有兩行文本:

2020-06-04 11:49:54: hello
2020-06-04 11:49:54: world

再次運行程序 log.py,命令如下:

C:\> python log.py

此時文件 log.txt 的內(nèi)容如下,文件中包含有四行文本:

2020-06-04 11:49:54: hello
2020-06-04 11:49:54: world
2020-06-04 11:50:06: hello
2020-06-04 11:50:06: world
  • 第 1 行和第 2 行,是第一次運行 log.py 產(chǎn)生的記錄
  • 第 3 行和第 4 行,是第二次運行 log.py 產(chǎn)生的記錄