Python Learning-文件處理

讀取文件

建一個(gè)txt文件,命名為data.txt內(nèi)容如下:

Hello, my name is Jack.
I'm 25 years old.

另新建一個(gè)read_file.py文件,并將data.txt與read_file.py文件置于同一目錄下

開始用代碼讀取data.txt中的內(nèi)容

with open('data.txt') as file_txt:
    contents = file_txt.read()
    print(contents)

輸出:

Hello, my name is Jack.
I'm 25 years old.

open方法會(huì)打開一個(gè)文件,并返回一個(gè)文件對(duì)象(file對(duì)象)

as將返回的file對(duì)象重新命名,方便使用

file.read()表示讀取文件中內(nèi)容

在讀取文件的時(shí)候,需要對(duì)文件進(jìn)行打開操作,在操作完畢后,必須將文件關(guān)閉,否則該文件會(huì)一直被占用,opne()可以打開文件,close()則將文件關(guān)閉;但是如果程序有報(bào)錯(cuò)等問題,代碼會(huì)無(wú)法執(zhí)行到close()語(yǔ)句上;with關(guān)鍵字表示在訪問文件一旦不再被訪問,則將文件關(guān)閉,這樣避免了忘記關(guān)閉或未正常關(guān)閉的風(fēng)險(xiǎn)

open()參數(shù)

file object = open(file_name [, access_mode][, buffering])

file_name是文件名,如果與代碼文件在同一目錄,則只提供文件名即可,如果不在同一目錄下,則需要按相對(duì)路徑絕對(duì)路徑的方式傳入文件的地址

絕對(duì)路徑就是文件的真正存在的路徑,是指從硬盤的根目錄(盤符)開始,進(jìn)行一級(jí)級(jí)目錄指向文件

相對(duì)路徑就是以當(dāng)前文件為基準(zhǔn)進(jìn)行一級(jí)級(jí)目錄指向被引用的資源文件

../ 表示當(dāng)前文件所在的目錄的上一級(jí)目錄

./ 表示當(dāng)前文件所在的目錄(可以省略)

/ 表示當(dāng)前站點(diǎn)的根目錄(域名映射的硬盤目錄)

例如,data.txt的地址在C:\Users\Administrator\Desktop\code\data目錄下,read_file.py文件在C:\Users\Administrator\Desktop\code\code目錄下

# 相對(duì)路徑 
file1 = open('../data/data.txt')
# 等同于 file1 = open('..\\data\\data.txt')
print(file1.read())
file1.close()

# 絕對(duì)路徑 
file2 = open(r'C:\Users\Administrator\Desktop\code\data\data.txt')
print(file2.read())
file2.close()

注意,windows平臺(tái)下,表示路徑層級(jí)關(guān)系時(shí)用反斜杠\,而\又表示轉(zhuǎn)譯的意思,因此需要通過\\來(lái)表示一個(gè)實(shí)際意義上的反斜杠,也可以在文件地址字符串前加一個(gè)r,告訴Python這是一個(gè)地址,不要對(duì)\進(jìn)行轉(zhuǎn)譯

access_mode是一個(gè)可選的參數(shù),表示打開的方式,常用可取值如下:

  • r以只方式打開文件,這是默認(rèn)模式,從頭開始讀取
  • r+打開文件并支持讀寫,從頭開始讀寫
  • w打開文件只允許寫入,如果文件存在,則從頭開始寫入(原文件被覆蓋),如果文件不存在,則創(chuàng)建新文件
  • w+打開文件用于讀寫,如果文件存在,則從頭開始讀寫(原文件被覆蓋),如果文件不存在,則創(chuàng)建新文件
  • a打開一個(gè)文件用于追加(寫入),即文件被寫入到末尾;如果文件不存在,則會(huì)創(chuàng)建新文件
  • a+打開一個(gè)文件用于在末尾讀寫,如果文件不存在 ,則會(huì)創(chuàng)建新文件

buffering是一個(gè)可選參數(shù),表示寄存區(qū)大小,略

上面例子中,read()是將整個(gè)文件讀取出來(lái)的,如果想要一行一行的讀取文件,可以使用循環(huán)

# 將文件地址保存到一個(gè)變量中
fine_name = '../data/data.txt'

# 打開文件,按行循環(huán)處理
with open(fine_name) as file_txt:
    for line in file_txt:
        print(line)

輸出:

Hello, my name is Jack.

I'm 25 years old.

中間有空行,因此在txt文件末尾有一個(gè)看不見的換行符,所以打印出來(lái)后會(huì)多出來(lái)空行

# 將文件地址保存到一個(gè)變量中
fine_name = '../data/data.txt'

# 打開文件,按行循環(huán)處理
with open(fine_name) as file_txt:
    for line in file_txt:
        print(line.strip())

輸出:

Hello, my name is Jack.
I'm 25 years old.

使用strip()函數(shù)去除多余的空行(strip() 方法用于移除字符串頭尾指定的字符(默認(rèn)為空格或換行符)或字符序列)

另一種方法

# 將文件地址保存到一個(gè)變量中
fine_name = '../data/data.txt'

# 打開文件,按行循環(huán)處理
with open(fine_name) as file_txt:
    lines = file_txt.readlines()
    
# 輸出內(nèi)容
for line in lines:
    print(line.strip())

輸出:

Hello, my name is Jack.
I'm 25 years old.

readlines()將文件中的內(nèi)容按行讀取,并存儲(chǔ)到一個(gè)列表中

雖然lines變量是在with代碼塊中定義的,但是在with代碼塊之外依然可以訪問得到

寫入文件

# 將文件地址保存到一個(gè)變量中
fine_name = '../data/data.txt'

# 打開文件,按行循環(huán)處理
with open(fine_name, 'w+') as file_txt:
    file_txt.write('I like playing basketball!')

運(yùn)行結(jié)果:

原來(lái)的內(nèi)容被覆蓋,在開頭寫入一新內(nèi)容

寫入多行

這里要強(qiáng)調(diào)的是,因?yàn)樵趯懭胛募臅r(shí)候,一行內(nèi)容結(jié)尾是沒有換行符的,所以如果要寫入多行內(nèi)容,需要手動(dòng)添加換行符

# 將文件地址保存到一個(gè)變量中
fine_name = '../data/data.txt'

# 打開文件,按行循環(huán)處理
with open(fine_name, 'w+') as file_txt:
    file_txt.write('I like playing basketball!\n')
    file_txt.write("I don't like vegetables!\n")

運(yùn)行結(jié)果:

如果不想將原有的內(nèi)容覆蓋掉,可以使用a參數(shù)

# 將文件地址保存到一個(gè)變量中
fine_name = '../data/data.txt'

# 打開文件,按行循環(huán)處理
with open(fine_name, 'a') as file_txt:
    file_txt.write('I like playing basketball!\n')
    file_txt.write("I don't like vegetables!\n")

運(yùn)行結(jié)果:

新的內(nèi)容被追加到原有內(nèi)容的末尾

對(duì)文件進(jìn)行重命名、刪除等操作

import os
 
# 重命名文件test1.txt到test2.txt。
os.rename( "../data/data.txt", "../data/data_file.txt" )

運(yùn)行結(jié)果

rename()方法存在于os模塊下,所以必須先引用os模塊

刪除文件

os.remove('../data/data_file.txt')

文件夾操作

創(chuàng)建文件夾

import os

# 在當(dāng)前目錄下創(chuàng)建new_file文件夾
os.mkdir("new_file")

運(yùn)行結(jié)果:

刪除文件夾

os.rmdir('new_file')

new_file文件夾將刪除

json數(shù)據(jù)

保存json數(shù)據(jù)

# 引用json模塊
import json

# 要保存的內(nèi)容
words = "hello world!"
# 保存地址
filename = 'hello.json'
# 打開文件寫入json數(shù)據(jù)
with open(filename,'w') as f:
    json.dump(words, f)

讀取json數(shù)據(jù)

# 引用json模塊
import json

# 保存地址
filename = 'hello.json'
# 打開文件寫入json數(shù)據(jù)
with open(filename,'r') as f:
    words = json.load(f)
    
print(words)

json.dump()存儲(chǔ)數(shù)據(jù)

json.load()加載數(shù)據(jù)

目錄
上一章 Python Learning-面向?qū)ο缶幊?類 二
下一章 Python Learning-異常處理

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

相關(guān)閱讀更多精彩內(nèi)容

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