#python
#python
Вопрос:
Я пытаюсь сопоставить данные между двумя файлами.
Файл 1:
# number of records, name
1234, keyword
Файл 2:
# date/time, name
2016-10-13| here is keyword in the name
в результате я хотел бы, чтобы файл 3 был записан как:
# number of records, name, date
1234, here is keyword in the name, 2016-10-13
Итак, идея здесь состоит в том, чтобы выполнить итерацию по файлу 1, получить все ключевые слова и проверить файл 2, если он там существует. Если это так, возьмите первое поле (дата) из файла 2 и поместите его как последний элемент в файл 1. Я написал следующий код, чтобы протестировать несколько вещей, но он работает плохо. Первая проблема, с которой я столкнулся, заключается в том, что python не находит ничего keyword
в файле 2.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import csv
FILE1='file1'
FILE2='file2'
file2data=[]
with open(FILE2, 'rb') as file2file:
reader = csv.reader(file2file, delimiter='|', quotechar='"')
for row in reader:
file2data.append(row)
def check(name):
print('checking: "%s"' % name)
rval=[]
for item in file2data:
if name in item:
rval.append(item)
return rval
with open(FILE1, 'rb') as csvfile:
csvreader = csv.reader(csvfile, delimiter=',', quotechar='"')
for row in csvreader:
entries=row[0]
keyword=row[1].strip()
checked=check(keyword)
if checked:
print('ok')
Кто-нибудь знает, почему это происходит? Почему внутри check()
функции следующий код
if name in item:
не находит никаких значений?
Ответ №1:
это
if name in item:
проверяет, есть ли ячейка элемента с точным содержимым name
в item
строке (список ячеек) ( item
на самом деле это строка, которую вы сохранили ранее, неправильное название :))
Что вам нужно, так это сканировать каждый элемент, чтобы увидеть, содержится ли строка. Итак, напишите:
if any(name in cell for cell in item):
вместо
any
вернется True
, как только if найдет name
подстроку в ячейке item
. Обратите внимание, что это совпадение подстрок, а не совпадение слов. key
будет соответствовать строке, содержащей keyword
. Если вы хотите совпадение слов (путем разделения слов по пробелам):
if any(name in cell.split() for cell in item):
Комментарии:
1. @StamKaly именно то, что я имею в виду с
any
частью. Но вы не можете использовать==
, потому что это может привести кname in item
проблеме (позвольте мне напомнить вам, чтоitem
это строка). Второе выражение позволяет проверить, находится ли слово в строке (подстроки не совпадают)