我已经编写了一个代码来搜索excel文件中的相关单元格。但是,它并没有像我希望的那样好用。 在伪代码中,这是应该做的:
Ask for input excel file
Ask for input textfile containing keywords to search for
Convert input textfile to list containing keywords
For each keyword in list, scan the excelfile
If the keyword is found within a cell, write it into a new excelfile
Repeat with next word
代码有效,但在输入excelfile中存在某些关键字时找不到它们。我认为它可能与我遍历列表的方式有关,因为当我提供单个关键字进行搜索时,它可以正常工作。这是我的全部代码:https://pastebin.com/euZzN3T3
这是我怀疑无法正常工作的部分。将文本文件拆分成列表工作正常(我认为)。
#IF TEXTFILE
elif btext == True:
#Split each line of textfile into a list
file = open(txtfile, 'r')
#Keywords in list
for line in file:
keywordlist = file.read().splitlines()
nkeywords = len(keywordlist)
print(keywordlist)
print(nkeywords)
#Iterate over each string in list, look for match in .xlsx file
for i in range(1, nkeywords):
nfound = 0
ws_matches.cell(row = 1, column = i).value = str.lower(keywordlist[i-1])
for j in range(1, worksheet.max_row + 1):
cursor = worksheet.cell(row = j, column = c)
cellcontent = str.lower(cursor.value)
if match(keywordlist[i-1], cellcontent) == True:
ws_matches.cell(row = 2 + nfound, column = i).value = cellcontent
nfound = nfound + 1
和我的match()
功能:
def match(keyword, content):
"""Check if the keyword is present within the cell content, return True if found, else False"""
if content.find(keyword) == -1:
return False
else:
return True
我是Python的新手,所以如果我的编码方式看起来像一个warzone,我很抱歉。有人能帮我看看我做错了什么(或者可能做得更好?)?感谢您抽出宝贵时间!
答案 0 :(得分:0)
将文本文件拆分成列表工作正常(我认为)。
这是你应该实际测试的东西(提示:它确实但不优雅)。制作易于测试的代码的最佳方法是将功能单元分离为单独的功能,即您可以创建一个带有文本文件名称并返回关键字列表的函数。然后,您可以轻松检查该位代码是否可以自行运行。从文件中读取行的更多pythonic方法(这是你做的,假设每行一个单词)如下:
with open(filename) as f:
keywords = f.readlines()
您的其余代码实际上可能比您预期的更好。我现在无法对其进行测试(并且无论如何都没有让您的电子表格进行测试),但如果您依靠nfound为所有关键字提供准确的计数,那么您和&# #39;我犯了一个小但重要的错误:它在循环中设置为零,因此你只得到最后一个关键字的计数。在循环外移动nfound = 0。
在Python中,迭代列表 - 或几乎任何东西 - 的方法不是递增整数然后使用该整数来索引列表中的值。而是循环遍历列表(或其他可迭代)本身:
for keyword in keywordlist:
...
作为提示,你根本不需要nkeywords。
我希望这能让你走上正轨。在将来提问时,它可以提供有关出错的更多信息,并且最好能够重现错误。