先假設資料夾已經如下佈置,程式碼和要資料夾在同一級目錄下(這裡是
files
資料夾)
其中,
files
資料夾下有這麼幾個檔案,每個檔案的內容如下(見記事本左上角檔名):
Python檔案操作(參考註釋的說明)
讀取檔案
f
=
open
(
‘files/file1。txt’
)
#開啟檔案
t
=
f
。
read
()
#將檔案的內容讀取出來賦值給t
f
。
close
()
#將檔案關閉,如果不在程式碼中關閉,待會用記事本開啟可能被警告被佔用
#這時,t 是個字串,可以對它做一般的字串操作,比如print,下面print看它是否正常
(
t
)
讀取正常。
寫檔案
f = open(‘result。txt’,‘w’)
#以“write”的方式開啟檔案
#如果要以“read”的方式開啟檔案,我們要給第二個引數賦值為‘r’,即f = open(‘。。檔名。。’,‘r’)
#但當第二個引數省略時,預設為‘r’
#即f = open(‘files/file1。txt’,‘r’)
#等價於
#f = open(‘files/file1。txt’)
#所以上面讀取檔案的例子中我們省略了第二個引數。
f。write(‘HHHHH’)#此時,我們將“HHHHH”寫入到了result。txt這個檔案中
f。write(‘\n’)#將換行符寫入到result。txt中
f。write(‘lalallala’)#繼續隨便寫東西
f。close()#將檔案關閉
程式碼執行後可以出去看看
result。txt
的檔案內容。
檢視資料夾下的檔案
import os #匯入os庫,這個庫可以實現我們要的功能,這個庫是官方的,不用另外下載
fs = os。listdir(‘files’) #這時,fs就得到了files資料夾下的所有檔名
print(fs)
fs
中每個元素如上圖所示,但是,顯然,每個元素都只是檔案的檔名,但是我們要開啟
file1。txt
的話,我們的
open
裡寫的是
files/file1。txt
,也就是說,我們還需要寫明是哪個資料夾下的,要把路徑寫到能指向那個檔案,所以我們下面把每個元素都變成 方便 我們開啟檔案的形式。
for i in range(len(fs)):
fs[i] = ‘files’ + ‘/’ + fs[i] #給每個檔名前面加上資料夾的名字,並按照路徑的格式加斜線
RE正則表示式庫的使用
正則表示式(regular expression)簡稱RE。其學習參考如下連結:
假定我們有如下需求,給定一個字串
lskdjfkl
,我們需要將
前面的尖括號對裡包圍著的
hhh
提取出來。我們可以寫出這樣一個正則表示式
<。*?>
來匹配內容我們需要的內容。
我們先對給定字串做個輸出觀察一下。(為了達到效果,我特定將這個字串寫成了多行多個目標的形式)
tt = ‘lskdjfkl
print(tt)
下面開始
re
庫使用及上述匹配的實現。
import re #匯入re庫
pattern = re。compile(‘<。*?>
result = pattern。findall(tt) #進行匹配,找到所有滿足條件的
print(result) #輸出觀察結果
可見,結果是個列表,並且找全了我們需要的。
假設我們現在希望把尖括號都去掉,已經後面的標識
也去掉,那麼我們可以這樣使用正則表示式
pattern_remove_tag = re。compile(“(?<=^<)。*(?=>
for i in range(len(result)):
temp = pattern_remove_tag。findall(result[i])
result[i] = temp[0]
#查詢到每個元素中間我們要的東西,並替換
#但是由於findall得到的temp是個列表
#然後這個列表裡只有一個元素,也就是我們需要的東西,,比如hhh或idddd這樣的東西
#所以我們用這個temp的第0個元素來替換result[i]
print(result)
此時我們要將這些東西寫入檔案
result_test。txt
中。
f = open(‘result_test。txt’,‘w’)
result_wait_to_write = ‘\n’。join(result)
#在result這個列表的每個元素間,用換行符\n拼接成單獨一個字串
f。write(result_wait_to_write) #寫入檔案
f。close() #關閉檔案
現在可以取
result_test。txt
檔案下觀察結果。
下面我們展示從
files
資料夾下每個檔案讀取內容並匹配後寫入到一個
result。txt
檔案中。待會可以將如下程式碼直接作為整個
id_extract。py
的內容了。
import os
import re
result_list = []
pattern = re。compile(‘<。*?>
pattern_content = re。compile(‘(?<=^<)。*(?=>
fs = os。listdir(‘files’)
for i in range(len(fs)): #構造檔案路徑
fs[i] = ‘files’ + ‘/’ + fs[i]
for i in range(len(fs)):
f = open(fs[i]) #開啟檔案
t = f。read() #讀取檔案
f。close() #關閉檔案
result_temp = pattern。findall(t) #進行匹配
for j in range(len(result_temp)):
temp_wait_to_replace = pattern_content。findall(result_temp[j])
result_temp[j] = temp_wait_to_replace[0] #完成最終內容的提取
result_list = result_list+result_temp #將兩個列表合起來,result_list每次都新增這次新找到的
print(fs[i],‘ is finished’) #提示一下這個檔案已完成
result_list_to_write = ‘\n’。join(result_list) #用換行符拼接成整一個字串,方便寫入檔案
f = open(‘result。txt’,‘w’)
f。write(result_list_to_write)
f。close() #寫入檔案完成
print(‘result file is ok’) #又是提示一下,完工啦,啦啦啦啦啦
整個檔案如圖