配对两个文件之间的数据

时间:2016-10-13 13:52:20

标签: 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没有在文件2中找到任何keyword

#!/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 个答案:

答案 0 :(得分:3)

if name in item:

检查name行(单元格列表)中是否存在具有确切内容item的项单元item实际上是您的行早先存储,错误命名:))

您需要扫描每个项目以查看字符串是否包含在内。所以写:

if any(name in cell for cell in item):

代替

如果在any的单元格中找到True个子字符串,

name将返回item。 请注意,这是子字符串匹配,而不是字匹配。 key将匹配包含keyword的字符串。如果你想要一个单词匹配(通过根据空格分割单词):

if any(name in cell.split() for cell in item):