Skip to main content
 首页 » 编程设计

python之在 python 中超出索引

2025年05月04日15tuyile006

我正在尝试对 excel 文件进行索引,我使用了 whoosh 包,但是,我 发现列表索引超出范围的错误。 拜托,任何人都可以帮助我吗? 我的代码是:

from whoosh import fields, index 
import os.path 
import csv 
import codecs 
 
# This list associates a name with each position in a row 
columns = ["juza","chapter","verse","analysis"] 
 
schema = fields.Schema(juza=fields.NUMERIC, 
                       chapter=fields.NUMERIC, 
                       verse=fields.NUMERIC, 
                       analysis=fields.KEYWORD) 
 
 
# Create the Whoosh index 
indexname = "index" 
if not os.path.exists(indexname): 
  os.mkdir(indexname) 
ix = index.create_in(indexname, schema) 
 
# Open a writer for the index 
with ix.writer() as writer: 
  # Open the CSV file 
  with codecs.open("yom.csv", "rb","utf8") as csvfile: 
    # Create a csv reader object for the file 
    csvreader = csv.reader(csvfile) 
 
    # Read each row in the file 
    for row in csvreader: 
 
      # Create a dictionary to hold the document values for this row 
      doc = {} 
 
      # Read the values for the row enumerated like 
      # (0, "juza"), (1, "chapter"), etc. 
      for colnum, value in enumerate(row): 
 
        # Get the field name from the "columns" list 
        fieldname = columns[colnum] 
 
        # Strip any whitespace and convert to unicode 
        # NOTE: you need to pass the right encoding here! 
        value = unicode(value.strip(), "utf-8") 
 
        # Put the value in the dictionary 
        doc[fieldname] = value 
 
      # Pass the dictionary to the add_document method 
      writer.add_document(**doc) 
    writer.commit() 
` 

我收到这个错误,我不知道为什么? 错误:

Traceback (most recent call last): 
  File "C:\Python27\yarab.py", line 39, in <module> 
    fieldname = columns[colnum] 
IndexError: list index out of range 

和我的 csv 文件:

1   3   1   Al+ POS:ADJ LEM:r~aHoma`n ROOT:rHm MS GEN 
1   3   2   Al+ POS:ADJ LEM:r~aHiym ROOT:rHm MS GEN 
1   4   1   POS:N ACT PCPL LEM:ma`lik ROOT:mlk M GEN 
1   4   2   POS:N LEM:yawom ROOT:ywm M GEN 
1   4   3   Al+ POS:N LEM:diyn ROOT:dyn M GEN 
1   5   1   POS:PRON LEM:&lt;iy~aA 2MS 

请您参考如下方法:

csv.reader 使用逗号作为默认分隔符:,

您必须明确定义分隔符:

csvreader = csv.reader(csvfile, delimiter=...) 

但是,您的 CSV 文件不是同质的。不带csv阅读会更好:

columns = ["juza","chapter","verse","analysis"] 
with codecs.open("yom.csv", "rb","utf8") as f: 
    for line in f: 
        a, b, c, rest = line.split('   ', 3) 
        doc = {k:v.strip() for k,v in zip(columns, rest.split(':'))} 
        # a,b,c are the first three integers 
        # doc is a dictionary