我试图匹配两个文件之间的数据。
文件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:
找不到任何值?
答案 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):