为什么 csvkit 的 in2csv 将日期转换为整数?
Why does csvkit's in2csv convert dates to integers?
我从 this URL, which contains rows like the following:
下载了一个 .xlsx 文件
但是当我尝试使用 in2csv 转换此文件时,从 csvkit 版本 0.9.1 开始,我得到如下输出行:
3,,0.625,42185,42916,912828XJ4,1900-01-26,0.9119,-----,...
4,,0.875,41835,42931,912828WT3,1900-01-27,0.9122,-----,...
我们得到的不是可识别为日期的条目,而是整数。整数似乎是 1900-01-01 与 xlsx 中相应日期之间的天数。此外,本应为整数的值($26 和 $27)会以日期格式显示!有没有一种简单的方法可以让 in2csv 以可识别的格式输出这些日期?
简而言之
只需升级 openpyxl
包。这是它的一个已知错误并已修复。
pip install --upgrade openpyxl
升级后:
3,,0.625,2015-06-30,2017-06-30,912828XJ4,26,0.9119,-----,...
4,,0.875,2014-07-15,2017-07-15,912828WT3,27,0.9122,-----,...
在龙
我将 table 的典型行复制到新创建的 .xlsx 文件中,并在转换时出现以下错误:
list index out of range
跟踪异常:
>>> from csvkit import convert
>>> convert.convert(open('test.xlsx', 'rb'), 'xlsx')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python3.4/site-packages/csvkit/convert/__init__.py", line 39, in convert
return xlsx2csv(f, **kwargs)
File "/usr/local/lib/python3.4/site-packages/csvkit/convert/xlsx.py", line 51, in xlsx2csv
book = load_workbook(f, use_iterators=True, data_only=True)
File "/usr/local/lib/python3.4/site-packages/openpyxl/reader/excel.py", line 154, in load_workbook
_load_workbook(wb, archive, filename, read_only, keep_vba)
File "/usr/local/lib/python3.4/site-packages/openpyxl/reader/excel.py", line 209, in _load_workbook
parsed_styles = read_style_table(archive)
File "/usr/local/lib/python3.4/site-packages/openpyxl/reader/style.py", line 200, in read_style_table
p.parse()
File "/usr/local/lib/python3.4/site-packages/openpyxl/reader/style.py", line 56, in parse
self.parse_cell_styles()
File "/usr/local/lib/python3.4/site-packages/openpyxl/reader/style.py", line 138, in parse_cell_styles
self._parse_xfs(node)
File "/usr/local/lib/python3.4/site-packages/openpyxl/reader/style.py", line 160, in _parse_xfs
format_code = self.number_formats[numFmtId-165]
IndexError: list index out of range
list index out of range
所以事情发生在 openpyxl
包中,用于 read/write Excel 2010 xlsx/xlsm 文件。
该问题已在 openyxl
的最新版本中 reported and fixed。然而在 csvkit
的 requirements.txt
中:
openpyxl==2.2.0-b1
根据 this issue,这只是当时的一种解决方法,所以我认为只需升级 openpyxl
(当前为 2.2.5)就可以了。
我从 this URL, which contains rows like the following:
但是当我尝试使用 in2csv 转换此文件时,从 csvkit 版本 0.9.1 开始,我得到如下输出行:
3,,0.625,42185,42916,912828XJ4,1900-01-26,0.9119,-----,...
4,,0.875,41835,42931,912828WT3,1900-01-27,0.9122,-----,...
我们得到的不是可识别为日期的条目,而是整数。整数似乎是 1900-01-01 与 xlsx 中相应日期之间的天数。此外,本应为整数的值($26 和 $27)会以日期格式显示!有没有一种简单的方法可以让 in2csv 以可识别的格式输出这些日期?
简而言之
只需升级 openpyxl
包。这是它的一个已知错误并已修复。
pip install --upgrade openpyxl
升级后:
3,,0.625,2015-06-30,2017-06-30,912828XJ4,26,0.9119,-----,...
4,,0.875,2014-07-15,2017-07-15,912828WT3,27,0.9122,-----,...
在龙
我将 table 的典型行复制到新创建的 .xlsx 文件中,并在转换时出现以下错误:
list index out of range
跟踪异常:
>>> from csvkit import convert
>>> convert.convert(open('test.xlsx', 'rb'), 'xlsx')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python3.4/site-packages/csvkit/convert/__init__.py", line 39, in convert
return xlsx2csv(f, **kwargs)
File "/usr/local/lib/python3.4/site-packages/csvkit/convert/xlsx.py", line 51, in xlsx2csv
book = load_workbook(f, use_iterators=True, data_only=True)
File "/usr/local/lib/python3.4/site-packages/openpyxl/reader/excel.py", line 154, in load_workbook
_load_workbook(wb, archive, filename, read_only, keep_vba)
File "/usr/local/lib/python3.4/site-packages/openpyxl/reader/excel.py", line 209, in _load_workbook
parsed_styles = read_style_table(archive)
File "/usr/local/lib/python3.4/site-packages/openpyxl/reader/style.py", line 200, in read_style_table
p.parse()
File "/usr/local/lib/python3.4/site-packages/openpyxl/reader/style.py", line 56, in parse
self.parse_cell_styles()
File "/usr/local/lib/python3.4/site-packages/openpyxl/reader/style.py", line 138, in parse_cell_styles
self._parse_xfs(node)
File "/usr/local/lib/python3.4/site-packages/openpyxl/reader/style.py", line 160, in _parse_xfs
format_code = self.number_formats[numFmtId-165]
IndexError: list index out of range
list index out of range
所以事情发生在 openpyxl
包中,用于 read/write Excel 2010 xlsx/xlsm 文件。
该问题已在 openyxl
的最新版本中 reported and fixed。然而在 csvkit
的 requirements.txt
中:
openpyxl==2.2.0-b1
根据 this issue,这只是当时的一种解决方法,所以我认为只需升级 openpyxl
(当前为 2.2.5)就可以了。