2015-07-12 2 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 reader разбивает каждую строку на столбцы на основе заданного разделителя (по умолчанию - запятая). поэтому строка была на самом деле чем-то вроде [«это предложение»] (список с одной строкой, которая представляет собой целую строку, поскольку не было запятых), а затем вы превратили ее в строку (например, «[» это предложение »] '), а затем вы попытались разбить его на основе пробелов ..., пожалуйста, прочитайте о csv reader еще немного, и в следующий раз вам следует отлаживать и видеть, что вы получаете на каждой итерации цикла, это сэкономит вам время. :) –

+0

Я понимаю это и узнал из вашего объяснения. Спасибо. – Joe

0

Вы можете использовать следующие слова: set. Это даст вам уникальный список слов. Любые не-альфа-символы и преобразуются в пробелы. Линия разделена на слова и нижняя, чтобы убедиться, что они совпадают.

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

Смежные вопросы