excel中的Python输入和输出数据

时间:2017-05-23 02:54:10

标签: python excel synonym

我是编程和Python的新手。我想问一些新手问题。我有一个excel文件,列中有单词。我想阅读那些单词,在另一个excel文件中生成同义词。以下是我想从excel中读取的文字:

     |      A         |      B      |      C

1    |    mankind     |   liquid    |     air    

2    |    professor   |   steam     |     haze 

3    |    name        |   kind      |     awkward       

4    |    went        |   save      |     enemy

这是我的代码:`

import nltk
import xlrd
import csv
import xlwt
import xlsxwriter
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize
from nltk.corpus import wordnet

workbook = xlrd.open_workbook('C:\\Users\\runeza\Desktop\database.xlsx')
sheet_names = workbook.sheet_names()
sheet = workbook.sheet_by_name(sheet_names[0])

row_idx = 0

for col_idx in range(sheet.ncols):
    for row_idx in range(sheet.nrows):
        cell = sheet.cell(row_idx, col_idx).value #read content in column cell
        synonyms = []

        for syn in wordnet.synsets(cell):
            for l in syn.lemmas():
                synonyms.append(l.name())
                a = (set(synonyms))
        #print (a)
                wb = xlwt.Workbook()
                ws = wb.add_sheet("test")
                for i, col in enumerate(a):
                    for j, row in enumerate(col):
                        ws.write(i, j, col)
        wb.save("sample.xls")

`

但是,此代码不会翻译所有单词。在输出excel中,它只打印出最后一个单词,并根据字母数重复每列中的单词。

1 个答案:

答案 0 :(得分:1)

我认为问题在于你要覆盖你在内循环的每个循环中创建的工作表,这就是为什么你只看到最后一个单词的原因。字母数的重复可能是由于这一行for j, row in enumerate(col):,col可能是一个字符串,你循环遍历字符数并在该循环中写入单元格。

我对你的代码做了一些修改,现在应该把你的表单中的每个单词替换成逗号分隔的所有同义词。

wb = xlwt.Workbook()
ws = wb.add_sheet("test")
for col_idx in range(sheet.ncols):
    for row_idx in range(sheet.nrows):
        cell = sheet.cell(row_idx, col_idx).value #read content in column cell
        synonyms = []
        for syn in wordnet.synsets(cell):
            for l in syn.lemmas():
                print(l.name())
                synonyms.append(l.name())
        ws.write(row_idx, col_idx, ",".join(synonyms))
wb.save("sample.xls")

请注意,我在任何循环之外创建输出文件一次,而我仅ws.writesheet.ncols * sheet.nrows次。