2017-05-23 5 views
0

저는 프로그래밍과 파이썬에서 정말 새로 왔습니다. 나는 몇 가지 초보자 질문을하고 싶다. 나는 열에 단어가있는 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

저는 내부 루프의 각 사이클에서 만드는 시트를 덮어 쓰는 것이 문제라고 생각합니다. 그래서 마지막 단어 만 볼 수 있습니다. 문자 수에 의한 반복은 아마도이 라인 for j, row in enumerate(col):에 의한 것일 수 있습니다. col은 아마도 문자열이고 문자 수를 반복하고 그 루프 안에 셀을 쓰고 있습니다.

코드에 수정을가 했으므로 시트의 각 단어를 쉼표로 구분 된 모든 동의어로 바꿔야합니다. 내가 어떤 루프 외부 번 출력 파일 을 만들고, 내가 ws.writesheet.ncols * sheet.nrows 번 호출

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") 

알 수 있습니다.

+0

작동합니다 .. 감사합니다. – runeza