У меня есть список с содержанием, как: -
for 30 days
for 40 working days
for 20 weeks
for 2 months
Я хочу разделить каждое предложение и сравнить с набором ключевых слов: -
day
week
month
year
Если в строке присутствует ключевое слово 'days'
, то я хочу умножить число в этой строке на '1'
. если присутствует ключевое слово 'month'
, умножьте число в этой строке на '30'
и так далее ... я новичок в python, поэтому, пожалуйста!
мой код
with open("test_term.csv", "rb") as file1:
reader = csv.reader(file1)
extractedlist = list(reader)
#print extractedlist
def split_line(text):
# split the text
words = text[0].split(' ')
# for each word in the line:
new_list = []
for word in words:
#print word
#print w2n.word_to_num(word)
conversion = w2n.word_to_num(word)
if isinstance(conversion, (int,long)):
#print conversion
new_list.append(conversion)
else:
new_list.append(word)
return new_list
for extraRow in extractedlist:
worn = split_line(extraRow)
keywords = {"day":1,"days":1,"year":365,"years":365,"week":7,"weeks":7,"month":30,"months":30}
#for s in worn:
# splitted_string = s.split(' ')
interesting_words = worn[2:]
mult = 1
for k,v in keywords.iteritems():
for word in interesting_words :
mult = v
break
result = mult*worn[1]
print result
Сейчас у меня есть только одна входная строка for thirty working days
, здесь 'thirty'
преобразуется в '30'
, поэтому изношенные мы имеем 'for thirty working days'
выход:
210
900
10950
900
210
10950
30
30
Но результат, который я ожидаю, равен 30 * 1, т. е. '30'
3 ответа
Вы могли бы сначала создать словарь: {{Х0}}
С расщепленной строкой вроде:
splitted_string = ["for", 30, "working", "days"]
interesting_words = splitted_string[2:] # ["working", "days"]
Оттуда вы можете просто получить элемент «days» и найти соответствующий элемент в своем словаре. Как только элемент найден, мы просто получаем значение и разрываем цикл.
mult = 1
for k,v in dictionnary.iteritems():
for word in interesting_words :
if k in word :
mult = v
break
Наконец вы можете выполнить свою операцию:
result = mult*splitted_string[1] #30
Если ваши данные находятся в списке, вы можете просто перебрать их. Затем разбейте каждую строку и найдите ключевое слово в конце списка ('day' in ' '.join(data_split[2:])
):
data = ['for 30 days',
'for 40 working days',
'for 20 weeks',
'for 2 months']
for d in data:
data_split = d.split(' ')
if 'day' in ' '.join(data_split[2:]):
print(int(data_split[1]))
elif 'month' in ' '.join(data_split[2:]):
print(int(data_split[1]) * 30)
import csv # imports the csv module
f = open('file.csv', 'rb') # opens the csv file
results = []
try:
reader = csv.reader(f) # creates the reader object
for row in reader: # iterates the rows of the file in orders
l = row[0].split(' ')
if 'day' in l[2]:
l[1] = int(l[1]) * 1
elif 'working' in l[2]:
if len(l) > 3 and 'day' in l[3]:
l[1] = int(l[1]) * 1
elif 'week' in l[2]:
l[1] = int(l[1]) * 7
elif 'month' in l[2]:
l[1] = int(l[1]) * 30
elif 'year' in l[2]:
l[1] = int(l[1]) * 365
results.append(l)
finally:
print results
f.close() # closing
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.