2016-03-10 2 views
-1

Я пытаюсь написать скрипт, который идентифицирует отдельные слова в предложении, сохраняет их в списке и заменяет каждое слово в исходном предложении позицией этого слово в списке.Как анализировать предложение, а затем перечислить позиции в файле csv

Например, предложение:

ASK NOT WHAT YOUR COUNTRY CAN DO FOR YOU ASK WHAT YOU CAN DO FOR YOUR COUNTRY 

Я хотел бы код для вывода:

1,2,3,4,5,6,7,8,9,1,3,9,6,7,8,4,5 

Это то, что я пытался до сих пор:

import csv 
file = open("file.csv", "a+") 
sentence = ["I", "LIKE", "TO", "GO", "TO", "THE", "PARK"] 
found = "" 
for position, sentence in enumerate(sentence): 
     found = found + str(position +1) + "," 
new_record = found+","+sentence 
file.write(str(found)) 
file.close() 

Только выходы 1,2,3,4,5,6,7,8..

+1

Пожалуйста, не пытайтесь удалить или аннулировать свой собственный вопрос, поскольку это не разрешено. Ответные вопросы предназначены для того, чтобы оставаться пригодными для будущих читателей. – Magisch

ответ

2

попробовать что-то вроде этого:

sentence = ["MY", "NAME", "IS", "JEFF", "AND", "JEFF", "LIKES", "CHEESE"] 
found = "" 
for word in sentence: 
     found += str(sentence.index(word)+1) + "," 

Выход: 1,2,3,4,5,4,7,8,

Последнее , должно быть chomped вниз с found.rstrip(",")

+1

Вы также можете использовать 'found = []' и добавлять каждый индекс к 'найденному'. Затем присоедините каждый элемент, используя '', '.join (found) '. –

+0

@ Farhan.K, будет ли это более оптимальным? Больше Pythonic? Это хороший способ устранить «rstrip». –

1

Вы можете сделать это, используя csv библиотеку следующим образом:

import csv 

text = "ASK NOT WHAT YOUR COUNTRY CAN DO FOR YOU ASK WHAT YOU CAN DO FOR YOUR COUNTRY" 
words = text.split() 

with open('output.csv', 'wb') as f_output: 
    csv_output = csv.writer(f_output) 
    csv_output.writerow([words.index(word)+1 for word in words]) 

Это даст вам output.csv содержащий описание Крыло:

1,2,3,4,5,6,7,8,9,1,3,9,6,7,8,4,5 

С помощью with он гарантирует, что файл будет автоматически закрыт в конце, так что нет необходимости добавлять f_output.close().

0
>>> the_list='ASK NOT WHAT YOUR COUNTRY CAN DO FOR YOU ASK WHAT YOU CAN DO FOR YOUR COUNTRY'.split(" ") 
>>> the_list 
['ASK', 'NOT', 'WHAT', 'YOUR', 'COUNTRY', 'CAN', 'DO', 'FOR', 'YOU', 'ASK', 'WHAT', 'YOU', 'CAN', 'DO', 'FOR', 'YOUR', 'COUNTRY'] 
>>> [the_list.index(item)+1 for index,item in enumerate(the_list)] 
[1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 3, 9, 6, 7, 8, 4, 5] 

Или как функцию, которая принимает строку (предполагая же формат только слова и пробелы)

def indexer(the_string): 
    return [the_string.split(" ").index(item)+1 for index,item in enumerate(the_string.split(" "))] 

Если вы хотели выход строку с только 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 3, 9, 6, 7, 8, 4, 5 (еще предполагающей же формат ввода), вы может просто выполнить строковое представление этого списка и заменить [ и ] на пустую строку.

>>>str([the_string.split(" ").index(item)+1 for index,item in enumerate(the_string.split(" "))]).replace("]","").replace("[","") 
'1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 3, 9, 6, 7, 8, 4, 5'