Я использую CSV (csv_f), который в основном только одинарные кавычки, разделенные запятыми слова:Python - проблемы, связанные с возвращением в функции
'foo','bar','yada', 'foo'
'test'
Я стараюсь смотреть каждый из них в другом документе (csv_g), который выглядит следующим образом:
1 'foo'
2 'bar'
3 'something'
4 'test'
И использовать это для создания разреженных векторов формата
SparseVector(#lines in csv_g, [#s in first column of csv_g], [# of occurences of each in csv_f])
примеры Abov е будет выглядеть следующим образом:
(4, [1, 2], [2, 1])
(4, [4], [1])
Я жевал это на некоторое время и попытался несколько различных подходов, но все они не работают. Я даже не пытаюсь обрабатывать множество вхождений, например, «foo». Мой самый близкий подход был таким:
import csv
f = open(r'/path/to/csv_f.txt')
g = open(r'/path/to/csv_g.txt')
csv_f = csv.reader(f)
csv_g = csv.reader(g, delimiter=' ')
def lookup(text):
for row_g in csv_g:
if row_g[1] == text:
return (row_g[0])
break
for row_f in csv_f:
positions = []
counts = []
size = len(row_f)
i=0
for i in range(size):
fword = row_f[i]
positions.append(lookup(fword))
counts.append(1)
print(positions, counts)
Запуск это было в результате:
[None, None, None, None] [1, 1, 1, 1]
[None] [1]
Я смущен, почему функция не возвращает None вместо спичек. Я думал, что это ударит по спине, вернет его и выйдет ...
Я также пробовал некоторые вложенные циклы, не определяя функцию поиска (я могу опубликовать эти попытки, если это поможет, пока я не хочу загромождать ваши экраны), но это тоже не работает. Я думаю, это может быть потому, что генераторы можно искать только один раз, но я не уверен.
Любые намеки на лучший подход для этого и почему возвращение не работает должным образом, было бы чрезвычайно оценено.
Несколько советов: вы можете только прокручивать открытый файл csv один раз. Если вы снова пропустите его, он не будет итерации вообще. Таким образом, вы хотите разобрать весь файл 'csv_g' один раз, сначала, создавая его или что-то вроде этого. Затем вы смотрите на вещи в dict, итерации через 'csv_f'. Также попробуйте распечатать материал в различных местах (например, print row_g, напечатать текст), чтобы помочь вам отладить то, что происходит. – Claudiu
'lookup' возвращает None, потому что вы ничего не согласны, добавили ли вы некоторые отпечатки, чтобы увидеть, что происходит в цикле? –
Спасибо, оба! Клаудиу, я попробую это. Padriac, печатающие элементы из обоих csv возвращают те же цитируемые строки, когда я этого ожидаю, позвольте мне подумать над хорошим способом отредактировать сообщение выше, чтобы показать это. –