2015-07-12 121 views
0

我想查看.txt文件並在其中創建單詞列表。我希望這些單詞是字符串,但輸出使它們成爲列表。Python:字符串列表

import csv, math, os 
os.chdir(r'C:\Users\jmela\canopy') 
f=open("romeo.txt") 

words = [] 

    for row in csv.reader(f): 
     line = str(row) 
     for word in line.split(): 
      if word not in words: 
       print word 
       words.append(word) 

    words.sort() 
    print words 

有誰知道我在做什麼錯?

+3

爲什麼在地球上,您將行轉換爲字符串,然後將其拆分? – Kasramvd

+0

這並不直接解決您的問題,但如果您想要一個沒有重複值的集合,請考慮使用集合。 – Kevin

+1

你正在得到一個字符串列表,你可能會混淆它,因爲它們中的一些已經有'['在其中。請參閱@Kasra評論爲什麼 – yuvi

回答

1

根據您的最新評論,看起來並不像您真的需要使用csv閱讀器。只是試試這個:

words = [] 
for line in open("romeo.txt", "r"): 
    for word in line.split(): 
     if word not in words: 
      words.append(word) 

words.sort() 
print words 

和凱文建議,使用set(),而不是列表。

+0

謝謝,這完美的作品。 我不跟隨我的原代碼出了什麼問題。你知道爲什麼這不起作用嗎? – Joe

+0

是的,就像我說的csv閱讀器根據給定的分隔符將每一行分成列(默認爲逗號)。所以行實際上就像是[「這是一個句子」](列表中有一個字符串是整行,因爲沒有逗號),然後你把它變成了字符串(例如'[「這是一個句子」] '),然後你試圖根據空格拆分它...請再閱讀一下csv閱讀器,下次你應該調試並看看你在循環的每一次迭代中得到了什麼,它會爲你節省一些時間。 :) –

+0

我明白這一點,並從你的解釋中瞭解到。謝謝。 – Joe

0

你可以使用set來保留你的話。這會給你一個獨特的單詞列表。任何非alpha字符並轉換爲空格。該行被分成單詞和小寫以確保它們匹配。

word_set = set() 
re_nonalpha = re.compile('[^a-zA-Z ]+') 

with open(r"romeo.txt", "r") as f_input: 
    for line in f_input: 
     line = re_nonalpha.sub(' ', line) # Convert all non a-z to spaces 

     for word in line.split(): 
      word_set.add(word.lower()) 

word_list = list(word_set) 
word_list.sort() 
print word_list 

這將使你持有下列單詞的列表:

['already', 'and', 'arise', 'breaks', 'but', 'east', 'envious', 'fair', 'grief', 'is', 'it', 'juliet', 'kill', 'light', 'moon', 'pale', 'sick', 'soft', 'sun', 'the', 'through', 'what', 'who', 'window', 'with', 'yonder'] 

更新還去除任何標點。

+0

確保佔用額外的空格或連字符 – ytpillai

0

不要將文本文件讀爲csv。只需刪除所有標點符號和非字母/非空格字符,如下所示:

def replacePunct(string): 
    alphabets = " abcdefghijklmnopqrstuvwxyz" 
    for s in string: 
     if s not in alphabets: 
      string = string.replace(s, " ") 
      replacePunct(string) 
    string = string.split() 
    string = [x for x in string if x != " "] 
    return {set(string): len(string)} 
+0

以普通文本文件的形式讀取文件,併爲每一行運行此程序 – ytpillai