Python 代码:出了什么问题... [搜索 .xls 文件,找到感兴趣的单词部分,使用 .txt 内容测试它是否是真正感兴趣的单词。]

Python Code: What's Wrong... [Search .xls file, find parts of words of interest, test with .txt conents if it's an actual word of interest.]

import sys
import xlrd
import xlwt

oldstdout = sys.stdout

file1 = open("C:\Users\dell2\AppData\Local\Programs\Python\Python35-32\ANAkatTEST.txt", "r")
list1 = file1.readlines()
list1 = [j.rstrip('\n') for j in list1]

print("The operation initiated.\nPlease show patience, this may take a while...")
sys.stdout = open("C:\Users\dell2\AppData\Local\Programs\Python\Python35-32\ANAkat.txt", "w")

workbook = xlrd.open_workbook("C:\Users\dell2\AppData\Local\Programs\Python\Python35-32\mitroo-10032017.xls", encoding_override="cp1251")
worksheet = workbook.sheet_by_name("mitroo-10032017")


for i in range(21826):
    if "ελι" in worksheet.cell(i, 11).value or "ελι" in worksheet.cell(i, 10).value:
        for j in list1:
         if j == worksheet.cell(i, 11).value or j == worksheet.cell(i, 10).value:
             print(worksheet.cell(i,0).value) 
             print("\n")
    elif "ελαι" in worksheet.cell(i, 11).value or "ελαι" in worksheet.cell(i, 10).value:
        for j in list1:
         if j == worksheet.cell(i, 11).value or j == worksheet.cell(i, 10).value:
             print(worksheet.cell(i,0).value) 
             print("\n")
    elif "λάδ" in worksheet.cell(i, 11).value or "λάδ" in worksheet.cell(i, 10).value:
        for j in list1:
         if j == worksheet.cell(i, 11).value or j == worksheet.cell(i, 10).value:
             print(worksheet.cell(i,0).value) 
             print("\n")
    elif "μέλ" in worksheet.cell(i, 11).value or "μέλ" in worksheet.cell(i, 10).value:
        for j in list1:
         if j == worksheet.cell(i, 11).value or j == worksheet.cell(i, 10).value:
             print(worksheet.cell(i,0).value) 
             print("\n")
    elif "μελισ" in worksheet.cell(i, 11).value or "μελισ" in worksheet.cell(i, 10).value:
        for j in list1:
         if j == worksheet.cell(i, 11).value or j == worksheet.cell(i, 10).value:
             print(worksheet.cell(i,0).value) 
             print("\n")
    elif "μέλισ" in worksheet.cell(i, 11).value or "μέλισ" in worksheet.cell(i, 10).value:
        for j in list1:
         if j == worksheet.cell(i, 11).value or j == worksheet.cell(i, 10).value:
             print(worksheet.cell(i,0).value) 
             print("\n")
    elif "βότ" in worksheet.cell(i, 11).value or "βότ" in worksheet.cell(i, 10).value:
        for j in list1:
         if j == worksheet.cell(i, 11).value or j == worksheet.cell(i, 10).value:
             print(worksheet.cell(i,0).value) 
             print("\n")
    elif "βοτάν" in worksheet.cell(i, 11).value or "βοτάν" in worksheet.cell(i, 10).value:
        for j in list1:
         if j == worksheet.cell(i, 11).value or j == worksheet.cell(i, 10).value:
             print(worksheet.cell(i,0).value) 
             print("\n")
    elif "βοταν" in worksheet.cell(i, 11).value or "βοταν" in worksheet.cell(i, 10).value:
        for j in list1:
         if j == worksheet.cell(i, 11).value or j == worksheet.cell(i, 10).value:
             print(worksheet.cell(i,0).value) 
             print("\n")
    elif "Ελι" in worksheet.cell(i, 11).value or "Ελι" in worksheet.cell(i, 10).value:
        for j in list1:
         if j == worksheet.cell(i, 11).value or j == worksheet.cell(i, 10).value:
             print(worksheet.cell(i,0).value) 
             print("\n")
    elif "Ελαι" in worksheet.cell(i, 11).value or "Ελαι" in worksheet.cell(i, 10).value:
        for j in list1:
         if j == worksheet.cell(i, 11).value or j == worksheet.cell(i, 10).value:
             print(worksheet.cell(i,0).value) 
             print("\n")
    elif "Λάδ" in worksheet.cell(i, 11).value or "Λάδ" in worksheet.cell(i, 10).value:
        for j in list1:
         if j == worksheet.cell(i, 11).value or j == worksheet.cell(i, 10).value:
             print(worksheet.cell(i,0).value) 
             print("\n")
    elif "Μέλ" in worksheet.cell(i, 11).value or "Μέλ" in worksheet.cell(i, 10).value:
        for j in list1:
         if j == worksheet.cell(i, 11).value or j == worksheet.cell(i, 10).value:
             print(worksheet.cell(i,0).value) 
             print("\n")
    elif "Μελισ" in worksheet.cell(i, 11).value or "Μελισ" in worksheet.cell(i, 10).value:
        for j in list1:
         if j == worksheet.cell(i, 11).value or j == worksheet.cell(i, 10).value:
             print(worksheet.cell(i,0).value) 
             print("\n")
    elif "Μέλισ" in worksheet.cell(i, 11).value or "Μέλισ" in worksheet.cell(i, 10).value:
        for j in list1:
         if j == worksheet.cell(i, 11).value or j == worksheet.cell(i, 10).value:
             print(worksheet.cell(i,0).value) 
             print("\n")
    elif "Βότ" in worksheet.cell(i, 11).value or "Βότ" in worksheet.cell(i, 10).value:
        for j in list1:
         if j == worksheet.cell(i, 11).value or j == worksheet.cell(i, 10).value:
             print(worksheet.cell(i,0).value) 
             print("\n")
    elif "Βοτάν" in worksheet.cell(i, 11).value or "Βοτάν" in worksheet.cell(i, 10).value:
        for j in list1:
         if j == worksheet.cell(i, 11).value or j == worksheet.cell(i, 10).value:
             print(worksheet.cell(i,0).value) 
             print("\n")
    elif "Βοταν" in worksheet.cell(i, 11).value or "Βοταν" in worksheet.cell(i, 10).value:
        for j in list1:
         if j == worksheet.cell(i, 11).value or j == worksheet.cell(i, 10).value:
             print(worksheet.cell(i,0).value) 
             print("\n")
    else:
        continue

sys.stdout = sys.__stdout__
sys.stdout = oldstdout 

print("The names are ready and in the file ANAkat.txt\n)
input("Press ENTER to terminate.")

以上代码returns完全没有错误。但是完成后,生成的 txt 完全是空的.. 之前我运行代码:

import sys
import xlrd
import xlwt

print("The operation initiated.\nPlease show patience, this may take a while...")
sys.stdout = open("C:\Users\dell2\AppData\Local\Programs\Python\Python35-32\Onomata.txt", "w")

workbook = xlrd.open_workbook("C:\Users\dell2\AppData\Local\Programs\Python\Python35-32\mitroo-10032017.xls", encoding_override="cp1251")
worksheet = workbook.sheet_by_name("mitroo-10032017")

for i in range(21826):
    if worksheet.cell(i, 8).value == xlrd.empty_cell.value:
        print(worksheet.cell(i,0).value) 
        print("\n")
    else:
        continue

sys.stdout = sys.__stdout__
sys.stdout = oldstdout 

print("The names are ready and in the file ANAkat.txt\n")
input("Press ENTER to terminate.")

它按预期工作并生成了一个 .txt,其中包含 .xls 文件中所有需要的名称

有什么想法吗?

编辑:Excel 文件有 21826 行,写入的内容最多到 M 列。该代码应该读取 .xls 并检查 K 和 L 行中感兴趣的部分单词。如果找到一个,则应检查当前单元格的单词是否有一个匹配 ANAkatTEST.txt 的内容(多行单词 - 每行 1 个单词)(全希腊语)。如果匹配,则当前行内容(名称)的第一列应打印在 ANAkat.txt 中,然后在内部打印新名称之前更改该行。 .xls 包含英语和希腊语单词,如果此时重要的话。

打印的列表:

list1= ['ελιά', 'ελιάς', 'ελιές', 'ελιών', 'λάδι', 'λαδιού', 'ελαίου', 'έλαια', 'ελαίων', 'ελαιόλαδο', 'ελαιολάδου', 'ελαιόλαδου', 'ελαιπαραγωγός', 'ελαιοπαραγωγών', 'ελαιοπαραγώγων', 'ελαιοτριβία', 'ελαιοτριβίας', 'ελαιοπαραγωγή', 'ελαιοπαραγωγής', 'ελαιοπαραγωγική', 'ελαιοπαραγωγικών', 'ελαιοπαραγωγοί', 'ελαιοτριβοί', 'ελαιοτριβών', 'ελαιοτριβός', 'ελαιτριβού', 'μέλι', 'μελιού', 'μέλια', 'μελιών', 'μελισσοκομία', 'μελισσοκομίας', 'μελισσοκομιών', 'μελισσοκομική', 'μελισσοκομικής', 'μελισσοκόμος', 'μελισσοκόμου', 'μελισσοκόμων', 'μελισσοκόμοι', 'μελισσοκομικά', 'μελισσοκομικών', 'βότανο', 'βοτάνου', 'βότανα', 'βοτάνων', 'βοτανικά', 'βοτανικών', 'βοτανική', 'βοτανικής', 'βοτανικές', 'βοτανικών', 'βοτανοπαραγωγός', 'βοτανοπαραγωγού', 'βοτανοπαραγώγου', 'βοτανοπαραγωγοί', 'βοτανοπαραγωγική', 'βοτανοπαραγωγών', 'βοτανοπαραγώγων', 'βοτανοπαραγωγής', 'βοτανοπαραγωγή', 'βοτανοπαραγωγές', 'βοτανοπαραγωγούς', 'τυρί', 'τυριού', 'τυριά', 'τυριών', 'τυροκόμος', 'τυροκόμου', 'τυροκόμοι', 'τυροκόμων', 'τυροκομικά', 'τυροκομικών', 'τυροκομικό', 'τυροκομικού', 'Ελιά', 'Ελιάς', 'Ελιές', 'Ελιών', 'Λάδι', 'Λαδιού', 'Ελάιου', 'Ελαια', 'Ελαίων', 'Ελαιόλαδο', 'Ελαιολάδου', 'Ελαιόλαδου', 'Ελαιπαραγωγός', 'Ελαιοπαραγωγών', 'Ελαιοπαραγώγων', 'Ελαιοτριβία', 'Ελαιοτριβίας', 'Ελαιοπαραγωγή', 'Ελαιοπαραγωγής', 'Ελαιοπαραγωγική', 'Ελαιοπαραγωγικών', 'Ελαιοπαραγωγοί', 'Ελαιοτριβοί', 'Ελαιοτριβών', 'Ελαιοτριβός', 'Ελαιτριβού', 'Μέλι', 'Μελιού', 'Μέλια', 'Μελιών', 'Μελισσοκομία', 'Μελισσοκομίας', 'Μελισσοκομιών', 'Μελισσοκομική', 'Μελισσοκομικής', 'Μελισσοκόμος', 'Μελισσοκόμου', 'Μελισσοκόμων', 'Μελισσοκόμοι', 'Μελισσοκομικά', 'Μελισσοκομικων', 'Βότανο', 'Βοτάνου', 'Βότανα', 'Βοτάνων', 'Βοτανικά', 'Βοτανικών', 'Βοτανική', 'Βοτανικής', 'Βοτανικές', 'Βοτανικών', 'Βοτανοπαραγωγός', 'Βοτανοπαραγωγού', 'Βοτανοπαραγώγου', 'Βοτανοπαραγωγοί', 'Βοτανοπαραγωγική', 'Βοτανοπαραγωγών', 'Βοτανοπαραγώγων', 'Βοτανοπαραγωγής', 'Βοτανοπαραγωγή', 'Βοτανοπαραγωγές', 'Βοτανοπαραγωγούς', 'Τυρί', 'Τυριού', 'Τυριά', 'Τυριών', 'Τυροκόμος', 'Τυροκόμου', 'Τυροκόμοι', 'Τυροκόμων', 'Τυροκομικά', 'Τυροκομικών', 'Τυροκομικό', 'Τυροκομικού', 'ΕΛΙΑ', 'ΕΛΙΑΣ', 'ΕΛΙΕΣ', 'ΕΛΙΩΝ', 'ΛΑΔΙ', 'ΛΑΔΙΟΥ', 'ΕΛΑΙΟΥ', 'ΕΛΑΙΑ', 'ΕΛΑΙΩΝ', 'ΕΛΑΙΟΛΑΔΟ', 'ΕΛΑΙΟΛΑΔΟΥ', 'ΕΛΑΙΟΠΑΡΑΓΩΓΟΣ', 'ΕΛΑΙΟΠΑΡΑΓΩΓΩΝ', 'ΕΛΑΙΟΤΡΙΒΙΑ', 'ΕΛΑΙΟΤΡΙΒΙΑΣ', 'ΕΛΑΙΟΠΑΡΑΓΩΓΙΚΗ', 'ΕΛΑΙΟΠΑΡΑΓΩΓΗΣ', 'ΕΛΑΙΟΠΑΡΑΓΩΓΙΚΗ', 'ΕΛΑΙΟΠΑΡΑΓΩΓΙΚΩΝ', 'ΕΛΑΙΟΠΑΡΑΓΩΓΟΙ', 'ΕΛΑΙΟΤΡΙΒΟΙ', 'ΕΛΑΙΟΤΡΙΒΩΝ', 'ΕΛΑΙΟΤΡΙΒΟΣ', 'ΕΛΑΙΟΤΡΙΒΟΥ', 'ΜΕΛΙ', 'ΜΕΛΙΟΥ', 'ΜΕΛΙΑ', 'ΜΕΛΙΩΝ', 'ΜΕΛΙΣΣΟΚΟΜΙΑ', 'ΜΕΛΙΣΣΟΚΟΜΙΑΣ', 'ΜΕΛΙΣΣΟΚΟΜΙΩΝ', 'ΜΕΛΙΣΣΟΚΟΜΙΚΗ', 'ΜΕΛΙΣΣΟΚΟΜΙΚΗΣ', 'ΜΕΛΙΣΣΟΚΟΜΟΣ', 'ΜΕΛΙΣΣΟΚΟΜΟΥ', 'ΜΕΛΙΣΣΟΚΟΜΩΝ', 'ΜΕΛΙΣΣΟΚΟΜΟΙ', 'ΜΕΛΙΣΣΟΚΟΜΙΚΑ', 'ΜΕΛΙΣΣΟΚΟΜΙΚΩΝ', 'ΒΟΤΑΝΟ', 'ΒΟΤΑΝΟΥ', 'ΒΟΤΑΝΑ', 'ΒΟΤΑΝΩΝ', 'ΒΟΤΑΝΙΚΑ', 'ΒΟΤΑΝΙΚΩΝ', 'ΒΟΤΑΝΙΚΗ', 'ΒΟΤΑΝΙΚΗΣ', 'ΒΟΤΑΝΙΚΕΣ', 'ΒΟΤΑΝΙΚΩΝ', 'ΒΟΤΑΝΟΠΑΡΑΓΩΓΟΣ', 'ΒΟΤΑΝΟΠΑΡΑΓΩΓΟΥ', 'ΒΟΤΑΝΟΠΑΡΑΓΩΓΟΙ', 'ΒΟΤΑΝΟΠΑΡΑΓΩΓΙΚΗ', 'ΒΟΤΑΝΟΠΑΡΑΓΩΓΩΝ', 'ΒΟΤΑΝΟΠΑΡΑΓΩΓΗΣ', 'ΒΟΤΑΝΟΠΑΡΑΓΩΓΟΥΣ', 'ΒΟΤΑΝΟΠΑΡΑΓΩΓΗ', 'ΒΟΤΑΝΟΠΑΡΑΓΩΓΕΣ', 'ΤΥΡΙ', 'ΤΥΡΙΟΥ', 'ΤΥΡΙΑ', 'ΤΥΡΙΩΝ', 'ΤΥΡΟΚΟΜΟΣ', 'ΤΥΡΟΚΟΜΟΥ', 'ΤΥΡΟΚΟΜΟΙ', 'ΤΥΡΟΚΟΜΩΝ', 'ΤΥΡΟΚΟΜΙΚΑ', 'ΤΥΡΟΚΟΜΙΚΩΝ', 'ΤΥΡΟΚΟΜΙΚΟ', 'ΤΥΡΟΚΟΜΙΚΟΥ', 'ελια', 'ελιας', 'ελιες', 'ελιων', 'λαδι', 'λαδιου', 'ελαιου', 'ελαια', 'ελαιων', 'ελαιολαδο', 'ελαιολαδου', 'ελαιπαραγωγος', 'ελαιοπαραγωγων', 'ελαιοτριβια', 'ελαιοτριβιας', 'ελαιοπαραγωγη', 'ελαιοπαραγωγης', 'ελαιοπαραγωγικη', 'ελαιοπαραγωγικων', 'ελαιοπαραγωγοι', 'ελαιοτριβοι', 'ελαιοτριβων', 'ελαιοτριβος', 'ελαιτριβου', 'μελι', 'μελιου', 'μελια', 'μελιων', 'μελισσοκομια', 'μελισσοκομιας', 'μελισσοκομιων', 'μελισσοκομικη', 'μελισσοκομικης', 'μελισσοκομος', 'μελισσοκομου', 'μελισσοκομων', 'μελισσοκομοι', 'μελισσοκομικα', 'μελισσοκομικων', 'βοτανο', 'βοτανου', 'βοτανα', 'βοτανων', 'βοτανικα', 'βοτανικων', 'βοτανικη', 'βοτανικης', 'βοτανικες', 'βοτανικων', 'βοτανοπαραγωγος', 'βοτανοπαραγωγου', 'βοτανοπαραγωγου', 'βοτανοπαραγωγοι', 'βοτανοπαραγωγικη', 'βοτανοπαραγωγων', 'βοτανοπαραγωγων', 'βοτανοπαραγωγης', 'βοτανοπαραγωγη', 'βοτανοπαραγωγες', 'βοτανοπαραγωγους', 'τυρι', 'τυριου', 'τυρια', 'τυριων', 'τυροκομος', 'τυροκομου', 'τυροκομοι', 'τυροκομων', 'τυροκομικα', 'τυροκομικων', 'τυροκομικο', 'τυροκομικου', 'Ελια', 'Ελιας', 'Ελιες', 'Ελιων', 'Λαδι', 'Λαδιου', 'Ελαιου', 'Ελαια', 'Ελαιων', 'Ελαιολαδο', 'Ελαιολαδου', 'Ελαιπαραγωγος', 'Ελαιοπαραγωγων', 'Ελαιοτριβια', 'Ελαιοτριβιας', 'Ελαιοπαραγωγη', 'Ελαιοπαραγωγης', 'Ελαιοπαραγωγικη', 'Ελαιοπαραγωγικων', 'Ελαιοπαραγωγοι', 'Ελαιοτριβοι', 'Ελαιοτριβων', 'Ελαιοτριβος', 'Ελαιτριβου', 'Μελι', 'Μελιου', 'Μελια', 'Μελιων', 'Μελισσοκομια', 'Μελισσοκομιας', 'Μελισσοκομιων', 'Μελισσοκομικη', 'Μελισσοκομικης', 'Μελισσοκομος', 'Μελισσοκομου', 'Μελισσοκομων', 'Μελισσοκομοι', 'Μελισσοκομικα', 'Μελισσοκομικων', 'Βοτανο', 'Βοτανου', 'Βοτανα', 'Βοτανων', 'Βοτανικα', 'Βοτανικων', 'Βοτανικη', 'Βοτανικης', 'Βοτανικες', 'Βοτανικων', 'Βοτανοπαραγωγος', 'Βοτανοπαραγωγου', 'Βοτανοπαραγωγου', 'Βοτανοπαραγωγοι', 'Βοτανοπαραγωγικη', 'Βοτανοπαραγωγων', 'Βοτανοπαραγωγων', 'Βοτανοπαραγωγης', 'Βοτανοπαραγωγη', 'Βοτανοπαραγωγες', 'Βοτανοπαραγωγους', 'Τυρι', 'Τυριου', 'Τυρια', 'Τυριων', 'Τυροκομος', 'Τυροκομου', 'Τυροκομοι', 'Τυροκομων', 'τυροκομικα', 'τυροκομικων', 'τυροκομικο', 'τυροκομικου']

问题是 if 语句永远不会为真。
这是因为文本文件中的单词由换行符分隔,因此 list1 中的 j 等于 j\n,而 excel 中的值仅为 j。试试 print (list1) 它会打印类似 ['word1\n','word2\n',..] 的东西。

所以当你写的时候 if j==worksheet.cell(i, 11).value
它是 if "ελι\n" == "ελι" 这不是真的所以它不会打印到输出文件。

解法:
使用 rstrip() 删除 list1 中每个单词末尾的换行符:

list1 = file1.readlines()
# remove \n from j in list1
list1= [j.rstrip('\n') for j in list1]