Python實(shí)現(xiàn)搜索關(guān)鍵字定位文件01

最近被新聞專業(yè)同學(xué)問起一個(gè)很實(shí)用的需求缀雳,大致是這樣的:一個(gè)文件夾內(nèi)有很多文件购啄,怎么通過搜索關(guān)鍵字就可以找到內(nèi)容包含關(guān)鍵字的word文件,同時(shí)獲得關(guān)鍵字所在段落的內(nèi)容寒随。由于最近在學(xué)習(xí)Python卖丸,所以對(duì)這個(gè)需求很感興趣纺且,于是當(dāng)時(shí)很快就把這個(gè)功能做出來了。



首先想到的自然是用腳本實(shí)現(xiàn)稍浆,新建一個(gè)kword.py文件载碌,差不讀四十幾行代碼將可以實(shí)現(xiàn),步驟是這樣的:
1.先獲取文件夾里面的所有文件路徑衅枫、其中用遞歸算法獲取子文件夾內(nèi)的文件路徑:

def get_process_files(root_dir):
    """process all files in directory"""
    cur_dir=os.path.abspath(root_dir)
    file_list=os.listdir(cur_dir)
    process_list=[]
    for file in file_list:
        fullfile=cur_dir+"\\"+file
        if os.path.isfile(fullfile):
            process_list.append(fullfile)
        elif os.path.isdir(fullfile):
            dir_extra_list=get_process_files(fullfile)
            if len(dir_extra_list)!=0:
                for x in dir_extra_list:
                    process_list.append(x)
    return process_list

2.利用python-docx模塊中的Document方法對(duì)word文件中每一段進(jìn)行關(guān)鍵字匹配:

def search_word(filename,word):
    #打開文檔
    document = Document(filename)
    # document = Document(r'C:\Users\Cheng\Desktop\kword\words\wind.docx')
    print filename
    #讀取每段資料
    l = [ paragraph.text.encode('gb2312') for paragraph in document.paragraphs];
    #輸出并觀察結(jié)果嫁艇,也可以通過其他手段處理文本即可
    for i in l:
        i=i.strip()
        # print i
        if i.find(word)!=-1:
            print filename, i

3.遍歷每一個(gè)文件并進(jìn)行查找:

def find_files(root_dir,word):
    process_list=get_process_files(root_dir)
    for files in process_list:
        search_word(files, word)

這里有兩個(gè)參數(shù)需要我們自己輸入,分別是文件目錄和關(guān)鍵字弦撩。

#文件根目錄
root_dir=sys.argv[1]
#要搜索的關(guān)鍵字
word=sys.argv[2]

至此步咪,在腳本目錄下運(yùn)行“python kword.py 目錄 關(guān)鍵字”命令就可以看到搜索結(jié)果,目前搜索功能比較簡單益楼,沒有做大量文件測(cè)試和算法優(yōu)化猾漫。
獻(xiàn)上腳本源碼:

#coding=utf-8
from docx import Document
import os,sys

def search_word(filename,word):
    #打開文檔
    document = Document(filename)
    # document = Document(r'C:\Users\Cheng\Desktop\kword\words\wind.docx')
    print filename
    #讀取每段資料
    l = [ paragraph.text.encode('gb2312') for paragraph in document.paragraphs];
    #輸出并觀察結(jié)果纯丸,也可以通過其他手段處理文本即可
    for i in l:
        i=i.strip()
        # print i
        if i.find(word)!=-1:
            print filename, i

def get_process_files(root_dir):
    """process all files in directory"""
    cur_dir=os.path.abspath(root_dir)
    file_list=os.listdir(cur_dir)
    process_list=[]
    for file in file_list:
        fullfile=cur_dir+"\\"+file
        if os.path.isfile(fullfile):
            process_list.append(fullfile)
        elif os.path.isdir(fullfile):
            dir_extra_list=get_process_files(fullfile)
            if len(dir_extra_list)!=0:
                for x in dir_extra_list:
                    process_list.append(x)
    return process_list

def find_files(root_dir,word):
    process_list=get_process_files(root_dir)
    for files in process_list:
        search_word(files, word)

if __name__=='__main__':
    #文件根目錄
    root_dir=sys.argv[1]
    #要搜索的關(guān)鍵字
    word=sys.argv[2]
    try:
        find_files(root_dir,word)
    except:
        pass

如果你喜歡本文章,還請(qǐng)點(diǎn)個(gè)關(guān)注和喜歡静袖,我會(huì)為大家不斷地帶來Python學(xué)習(xí)筆記。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末俊扭,一起剝皮案震驚了整個(gè)濱河市队橙,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌萨惑,老刑警劉巖捐康,帶你破解...
    沈念sama閱讀 222,104評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異庸蔼,居然都是意外死亡解总,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門姐仅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來花枫,“玉大人,你說我怎么就攤上這事掏膏±秃玻” “怎么了?”我有些...
    開封第一講書人閱讀 168,697評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵馒疹,是天一觀的道長佳簸。 經(jīng)常有香客問我,道長颖变,這世上最難降的妖魔是什么生均? 我笑而不...
    開封第一講書人閱讀 59,836評(píng)論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮腥刹,結(jié)果婚禮上马胧,老公的妹妹穿的比我還像新娘。我一直安慰自己衔峰,他們只是感情好漓雅,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著朽色,像睡著了一般邻吞。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上葫男,一...
    開封第一講書人閱讀 52,441評(píng)論 1 310
  • 那天抱冷,我揣著相機(jī)與錄音,去河邊找鬼梢褐。 笑死旺遮,一個(gè)胖子當(dāng)著我的面吹牛赵讯,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播耿眉,決...
    沈念sama閱讀 40,992評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼边翼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了鸣剪?” 一聲冷哼從身側(cè)響起组底,我...
    開封第一講書人閱讀 39,899評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎筐骇,沒想到半個(gè)月后债鸡,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,457評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡铛纬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評(píng)論 3 341
  • 正文 我和宋清朗相戀三年厌均,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片告唆。...
    茶點(diǎn)故事閱讀 40,664評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡棺弊,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出擒悬,到底是詐尸還是另有隱情镊屎,我是刑警寧澤,帶...
    沈念sama閱讀 36,346評(píng)論 5 350
  • 正文 年R本政府宣布茄螃,位于F島的核電站缝驳,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏归苍。R本人自食惡果不足惜用狱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望拼弃。 院中可真熱鬧夏伊,春花似錦、人聲如沸吻氧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽盯孙。三九已至鲁森,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間振惰,已是汗流浹背歌溉。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人痛垛。 一個(gè)月前我還...
    沈念sama閱讀 49,081評(píng)論 3 377
  • 正文 我出身青樓草慧,卻偏偏與公主長得像,于是被迫代替她去往敵國和親匙头。 傳聞我的和親對(duì)象是個(gè)殘疾皇子漫谷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容