
讀取文件
建一個(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-異常處理