Python "list index out of range" 当我将 csv 转换为 docx 时

Python "list index out of range" when I am converting a csv to docx

我的 csv 每 17 行都有空白行(第 17,34 行中的空白行....) 我试图将其转换为 docx。但是,"list index out of range"错误就出来了。如果我删除 csv 中的空白行,它将正常工作。即使我通过 excel 手动添加它,docx 功能也可以正常工作。 table.row 似乎无法处理我的 csv 中的空白行。

    row_cells[i].text = row[i]
IndexError: list index out of range

你能帮帮我吗?提前谢谢你。

path = os.getcwd()
##Use glob.glob to get all the "txt.csv.csv" files.
allfiles = glob.glob(path + "/*.txt.csv.csv")
df_out_filename = 'Xunjian-Report.csv'
with open(df_out_filename, 'w+', newline='') as fout:
    writer = csv.writer(fout)
    for filename in allfiles:
        with open(filename) as fin:
            reader = csv.reader(fin)
            writer.writerows(reader)
            writer.writerow("[]")  ##Insert blank row at the end

###To generate the docx
csvfile = 'Xunjian-Report.csv'
doc = docx.Document()
date = datetime.datetime.now()
with open(csvfile, newline='') as f:
    csv_reader = csv.reader(f)
    csv_headers = next(csv_reader)
    csv_cols = len(csv_headers)
    print(csv_cols)
    # Adding Subject of the document and the date
    doc.add_heading('Report', level=0)
    doc.add_heading('Date: %s/%s/%s' % (date.day, date.month, date.year), level=1)
    table = doc.add_table(rows=1, cols=csv_cols)
    table.autofix=False
    hdr_cells = table.rows[0].cells
    for i in range(csv_cols):
        hdr_cells[i].text = csv_headers[i]
    for row in csv_reader:
        row_cells = table.add_row().cells
        for i in range(csv_cols):
            row_cells[i].text = row[i]

如果您的 row 列表没有足够的元素供 row[i],您可以点击 IndexError。如果您的输入中有空白行,这些空白行确实会更短(甚至只是空列表)。

根据您的处理需要,您可以只处理与每行中一样多的列,替换:

for i in range(csv_cols):

与:

for i in range(len(row)):

甚至:

for (idx, cell) in enumerate(csv_cols):
    row_cells[idx].text = cell

或者跳过空列表的行(但是这有点不稳健,前者也会处理不均匀的行长度,如果有可能遇到这种情况):

for row in csv_reader:

可以阅读:

for row in csv_reader:
    if not row: continue  # skip empty row, go to the next one