Python xlrd.open_workbook 生成错误:ValueError: invalid literal for int() with base 10: '

Posted

技术标签:

【中文标题】Python xlrd.open_workbook 生成错误:ValueError: invalid literal for int() with base 10: \'【英文标题】:Python xlrd.open_workbook generates error: ValueError: invalid literal for int() with base 10: 'Python xlrd.open_workbook 生成错误:ValueError: invalid literal for int() with base 10: ' 【发布时间】:2019-04-16 08:30:19 【问题描述】:

我正在尝试在 python 中打开 Excel 文件。 (Excel本身可以毫无问题地打开)。

但尝试在 python 中读取它时出现错误: "ValueError: int() 以 10 为底的无效文字:''"

如何治疗?或者有什么办法吗?可能是其他一些读取 Excel 文件的包?

两者都会发生 xlrd.open_workbook 和 pd.read_excel 在我的电脑上。


奇怪的是:如果我用Excel打开然后用Excel保存, 那么这样一个保存的版本 - 可以通过python毫无问题地打开。 因此,文件可能是由一些陈旧的 Excel 保存的。 但是我有很多这样方便的打开保存会很痛苦。


这里是详细的错误信息

----> 4 xlrd.open_workbook(dirName + fn )

C:\Anaconda3\lib\site-packages\xlrd\__init__.py in open_workbook(filename, logfile, verbosity, use_mmap, file_contents, encoding_override, formatting_info, on_demand, ragged_rows)
    420                 formatting_info=formatting_info,
    421                 on_demand=on_demand,
--> 422                 ragged_rows=ragged_rows,
    423                 )
    424             return bk

C:\Anaconda3\lib\site-packages\xlrd\xlsx.py in open_workbook_2007_xml(zf, component_names, logfile, verbosity, use_mmap, formatting_info, on_demand, ragged_rows)
    831         x12sheet = X12Sheet(sheet, logfile, verbosity)
    832         heading = "Sheet %r (sheetx=%d) from %r" % (sheet.name, sheetx, fname)
--> 833         x12sheet.process_stream(zflo, heading)
    834         del zflo
    835 

C:\Anaconda3\lib\site-packages\xlrd\xlsx.py in own_process_stream(self, stream, heading)
    546         for event, elem in ET.iterparse(stream):
    547             if elem.tag == row_tag:
--> 548                 self_do_row(elem)
    549                 elem.clear() # destroy all child elements (cells)
    550             elif elem.tag == U_SSML12 + "dimension":

C:\Anaconda3\lib\site-packages\xlrd\xlsx.py in do_row(self, row_elem)
    663                 if explicit_row_number and cell_name[charx:] != row_number:
    664                     raise Exception('cell name %r but row number is %r' % (cell_name, row_number))
--> 665             xf_index = int(cell_elem.get('s', '0'))
    666             cell_type = cell_elem.get('t', 'n')
    667             tvalue = None

ValueError: invalid literal for int() with base 10: ''

【问题讨论】:

【参考方案1】:

试试

xlrd.open_workbook(dirName +str(fn)+".xlsx")

或者

xlrd.open_workbook(dirName +str(fn)+".xls")

【讨论】:

它没有帮助。如果我将文件重命名为“.xls”,则会出现相同的错误 然后文件中的列包含空白值以及整数,以调试需要更多详细信息。请参考***.com/questions/1841565/… 但是 Excel 通常包含这样的东西,python 通常可以读取它。此外,通过 Excel + 保存打开 -> 然后 python 加载工作 - 但它不会改变这样的事情 我不确定链接的问题是否提供了线索,至少对我没有提示【参考方案2】:

我遇到了同样的问题,我发现了这个:https://github.com/python-excel/xlrd/pull/346/files

我不知道为什么它没有被提交,为什么你不应该这样做...... 但是由于拒绝此更改,论坛上的答案是“使用 openpyxl”所以,我只是做了这个更改,因为不,我不想而且我没有时间,这对我来说似乎是一个很好的解决方案。也许这对其他人有帮助,也许有人可以澄清这是怎么回事。

PS.:错误告诉你应该在哪里更改:'C:\Anaconda3\lib\site-packages\xlrd\xlsx.py' 在问题的情况下

【讨论】:

以上是关于Python xlrd.open_workbook 生成错误:ValueError: invalid literal for int() with base 10: '的主要内容,如果未能解决你的问题,请参考以下文章

【Python】xlrd模块使用

书没有调用 xlrd.open_workbook() 的 extract_formulas 属性

解决open()函数xlrd.open_workbook()函数文件名包含中文,sheet名包含中文报错的问题

python3 xlrd包的用法

python与execl的读写

Python中xlrd模块解析