【问题标题】:python: Convert excel to csvpython:将excel转换为csv
【发布时间】:2019-05-14 09:13:01
【问题描述】:

我有几行代码应该将我当前工作目录中的大量 excel 电子表格转换为 csv 文件。

不幸的是,在运行此代码后,我在第 21 行遇到了错误。 什么可能导致此错误? 提前致谢。

python
import os
import csv
import openpyxl

for spreadsheet in os.listdir('.'):
    if spreadsheet.endswith('.xlsx'):
        wb = openpyxl.load_workbook(spreadsheet)
        for sheet_name in wb.get_sheet_names():
            sheet = wb.get_sheet_by_name(sheet_name)
            csv_file = open(sheet_name + '.csv', 'w', newline='')
            csv_writer = csv.writer(csv_file)
            for row_num in range(1, sheet.max_row + 1):
                row_data = []
                for col_num in range(1, sheet.max_column + 1):
                    row_data.append(sheet.cell(row=row_num, column=col_num).value)
                for row in row_data:
                    csv_writer.writerow(row)
            csv_file.close()

我希望已经转换了csv 文件。以下是我得到的。

C:\Users\User\Anaconda3\lib\site-packages\ipykernel_launcher.py:10: DeprecationWarning:调用已弃用的函数 get_sheet_names(使用 wb.sheetnames)。

在我们加载内容时从sys.path 中删除CWD

C:\Users\User\Anaconda3\lib\site-packages\ipykernel_launcher.py:11: DeprecationWarning:调用已弃用的函数 get_sheet_by_name(使用 wb[工作表名称])。

这是InteractiveShellApp.init_path()添加回来的

Error  Traceback (most recent call last) <ipython-input-29-1b50f926f2e2> in <module>() 
     19 
     20                 for row in row_data:
---> 21                     csv_writer.writerow(row)
     22             csv_file.close()
Error: iterable expected, not int

【问题讨论】:

    标签: python-3.x csv spreadsheet


    【解决方案1】:

    考虑用那个替换你的最后几行:

    for row_num in range(1, sheet.max_row + 1):
        row_data = []
        for col_num in range(1, sheet.max_column + 1):
            row_data.append(sheet.cell(row=row_num, column=col_num).value)
        csv_writer.writerow(row_data)
    csv_file.close()
    

    当您执行for row in row_data: 时,您实际上是在迭代单个值(它们是整数)

    【讨论】:

    • @olinox14,当我替换代码时,我得到了这个错误:ValueError: I/O operation on closed file.
    • 检查csv_file.close() 行的缩进,它必须在for row_num 循环之后执行。甚至更好:使用with 关键字打开您的文件
    猜你喜欢
    • 2014-11-19
    • 2016-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-17
    • 2012-10-10
    • 1970-01-01
    • 2016-07-02
    相关资源
    最近更新 更多