сопряжение данных между двумя файлами

#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 это строка). Второе выражение позволяет проверить, находится ли слово в строке (подстроки не совпадают)