2011-09-22 85 views
0

請看下面的代碼。這會在文本文件中找到包含字母'b'的字母並打印所有包含字母'b'的單詞?如何使用Python搜索包含某個文本文本的文字?

x = open("text file", "r") 
for line in x: 
    if "b" and in line: print line 

searchfile.close() 

現在這是我的問題。我想不僅僅搜索一個,而是幾個字母。 像,a和b都必須在同一個詞。 然後打印包含兩個字母的單詞列表。

我想讓用戶決定這些字母應該是什麼。

我該怎麼做?


現在我想出了一些新的東西。讀完答案後。

X =打開( 「文本文件」, 「R」)

在X線: 如果在線路的 「b」 行和 「c」 和 「r」 在線:打印行

這個工作,而不是? 我如何讓用戶輸入字母?

+0

這是一個拼字遊戲求解器嗎? –

回答

1

不,你的代碼(除了一個事實,即它的語法不正確的),將打印每具有「B」,不是的話。

爲了做你想做的事情,我們需要更多關於文本文件的信息。 Suppossing單詞由單個空格分開,你可以做這樣的事情

x = open("file", "r") 
words = [w for w in x.read().split() if "a" in w or "b" in w] 
+1

沒有空格。 – user959397

+0

Split可以處理任何類型的空白。 ''\ t \ tfee fie \ nfoe fum \ r \ n「.split()'給出'['fee','fie','foe','fum']' –

+0

如果他只想匹配一個單詞信?還是三個字母?你的代碼應該可能處理所有這些情況。 –

0

您可以使用設置此:

letters = set(('l','e')) 
for line in open('file'): 
    if letters <= set(line): 
    print line 

在上面,letters <= set(line)測試是否letters每一個元素出現在設置由line的唯一字母組成。

0
x = open("text file", "r") 
letters = raw_input('Enter the letters to match') # "ro" would match "copper" and "word" 
letters = letters.lower() 
for line in x: 
    for word in line.split() 
     if all(l in word.lower() for l in letters): # could optimize with sets if needed 
      print word 
0

首先,您需要將文件的內容拆分爲單詞列表。要做到這一點,你需要將它拆分爲換行符和空格,可能也會超出,我不知道。根據需求的複雜程度,您可能需要使用re.split。但是,對於這方面的例子讓剛剛去:

words = [] 

with open('file.txt', 'r') as f: 
    for line in f: 
    words += line.split(' ') 

現在,這將有助於效率,如果我們只需要掃描一次的話,想必你只想要一個詞來一次最後的名單反正出現,所以我們投這個列表作爲一個set

words = set(words) 

然後讓那些只含有selected_words所有的字母在其他一些迭代letters

selected_words = [word for word in words if 
    [letter for letter in letters if letter in word] == letters] 

我認爲這應該工作。任何關於效率的想法?我不知道這些列表解析如何運行的細節。

+0

如果您正在分割空白,則不需要傳遞參數進行拆分。正如所寫的,'line.split('')'會留下一個尾隨的換行符。 –

+0

'[字母中的字母如果字母中的字母的字母] ==字母'可以縮寫爲'全部(字母中的字母中的字母)' –

+0

我喜歡你只檢查一個字。 –

相關問題