2016-07-13 43 views
0

我想在我的python代碼中使用txt文件,但我無法這樣做。 問題要求打印文件中沒有特定字符集的單詞。python使用文件

def give(): 
    fin=open('words2.txt') 
    line=fin.readline() 
    for line in fin: 
     word=line.strip() 
     print word 
def enter(forbid): 
    words=give() 
    for letter in words: 
     if letter in forbid: 
      return False 
     else: 
      print words 

這個代碼不給所有

+2

你確定你在你的文章中正確縮進了你的代碼嗎? – edwinksl

+0

你應該改正縮進,並確切地告訴什麼不起作用。它打印什麼?它是否引發異常? – zezollo

回答

3

我想我找到了你想要的東西:在使用本Lorem存有

#!/usr/bin/env python2 

def give(): 
    result = [] 
    with open('words2.txt', mode='rt') as fin: 
     for line in fin: 
      result += line.split() 
    return result 

def enter(forbid): 
    words = give() 
    for w in words: 
     if all([letter not in forbid for letter in w]): 
      print w 


enter("bcdfghjklmst") 

(即從words2.txt內容):

而土格言虛無ISTE現狀極小repudiandae possimus 。 Provident nam explicabo ut accusantium odit voluptatibus。 Animi dolor sit deserunt quisquam perspiciatis aut et voluptas。 Repellat quo accusamus sint。

Tempore vero iste rerum。 Harum aut rerum qui rerum quis dolores perspiciatis。準確的需求和最佳的解決方案。 Autem delectus aut sunt ab officiis坐在非voluptatum。 Id sequi voluptas qui quo officiais placeat voluptatem。

Nemo ipsa illo amet deleniti。 Praesentium v​​oluptatum voluptate mollitia quod voluptates beatae。 Doloremque molestias nostrum iste possimus veritatis repellendus et dolor。 Quidem sit iusto autem et id dicta ut。

Ad earum incidunt officia ea。 Et quidem molestiae et facere。 Culpa harum veniam illum。 Culpa quod porro in etos adipisci。 Sint accusantium est qui inventore minima perferendis。 Autem quidem omnis et quia error enim nam。

分隔和分隔。 Et deleniti expedita earum nesciunt voluptas ea。在asperiores a nobis occaecati quam qui repellendus molestiae。 Except distinstio consequatur commodi est velit sit。坐在solip adipisci aut。 Eos voluptatibus enim corrupti。

輸出(不包含從 「bcdfghjklmst」 任何字母所有字):

$ ./test_script2.py 
quo 
quo 
vero 
qui 
non 
qui 
quo 
ea. 
porro 
in 
qui 
quia 
error 
ea. 
In 
a 
qui 
a 

說明:

  • give()收集詞語的一個列表,並返回他們都
  • give()之內,使用with聲明來確保文件得到正確處理(最後關閉......)
  • for w in words瀏覽列表中的所有單詞
  • [letter not in forbid for letter in w]是僅包含布爾值的comprehension list。對於當前檢查詞的每個字母(即w),如果該字母不屬於forbid,則將放入Trueall()True只有在所有列表中的布爾是True,所以僅當w所有信件不屬於forbid
  • 最後一部分可以縮短

這樣的:

def enter(forbid): 
    for w in give(): 
     if all([letter not in forbid for letter in w]): 
      print w 
+0

終於明白了! – sam007

+0

做得好zezello –

0

作爲輸出已經指出,壓痕是錯誤的,也給予(),這樣的話被分配一個NoneType不返回任何東西。

+0

好的。得到它了。謝謝 – sam007

+0

其實'give()'沒有返回原始代碼中的任何內容的原因不是因爲縮進錯誤(應該觸發語法錯誤),而是因爲'give()'沒有'return'語句 – zezollo

+0

@zezollo我試圖解決這個問題。但不幸的是,事實並非如此。我試圖從txt文件中提取那些沒有這些特定字母的單詞。 – sam007

0

你必須返回讓步()函數的值..

def give(): 
    fin=open('words2.txt', 'r') 
    line=fin.readlines() 
    words = [] 
    for line in fin: 
     word=line.split(" ") 
     for i in word: 
      print i 
      words.append(i) 
    return words 
def enter(forbid): 
    words=give() 
    for letter in words: 
     if letter in forbid: 
      return False 
     else: 
      print words 
      return True 
+0

這仍然不打印任何東西 –

+0

仍然沒有,也許它的python 3即時通訊使用 –

+0

@SumanKalyan這不會按預期工作,因爲你只會返回第一個單詞。您應該「收集」任何迭代器中的所有單詞,然後完全返回它 – zezollo

0

我試過你的代碼,但不能工作什麼的,所以我把程序寫我前一段時間,因爲據我所看到的,你打開的方式不對的文件,這裏是我的代碼:

,你可以看到你沒有添加「RT」至極代表閱讀和文本模式,希望這有助於。

感謝