Python 生成Excel(CSV)表格架构并导入数据
我将如何创建一个MYSQL表模式来检查Excel(或CSV)文件。 是否有任何准备好的Python库用于此任务 列标题将被清除为列名。数据类型将根据电子表格列的内容进行估计。完成后,数据将加载到表中Python 生成Excel(CSV)表格架构并导入数据,python,mysql,excel,csv,import-from-excel,Python,Mysql,Excel,Csv,Import From Excel,我将如何创建一个MYSQL表模式来检查Excel(或CSV)文件。 是否有任何准备好的Python库用于此任务 列标题将被清除为列名。数据类型将根据电子表格列的内容进行估计。完成后,数据将加载到表中 我有一个大约200列的Excel文件,我想开始规范化它。使用phpmyadmin的快速而肮脏的解决方法: 创建具有适当列数的表。确保数据与列相符 将CSV导入表中 使用建议表结构 据我所知,没有任何工具可以自动化这个过程(我希望有人能证明我错了,因为我以前就遇到过这个问题)。 当我这样做时,我想到
我有一个大约200列的Excel文件,我想开始规范化它。使用phpmyadmin的快速而肮脏的解决方法:
- 创建具有适当列数的表。确保数据与列相符
- 将CSV导入表中
- 使用建议表结构
(1) 在数据库中手动创建具有适当类型的列,然后导入,或
(2) 编写某种过滤器,可以“弄清楚”列应该是什么数据类型。 我选择了第一个选项,主要是因为我认为我实际上无法编写一个程序来进行类型推断。
如果您决定编写一个类型推断工具/转换,那么您可能需要处理以下几个问题:
(1) Excel日期实际上存储为自1899年12月31日以来的天数;那么,如何推断一列是日期,而不是某个数字数据(例如人口)?
(2) 对于文本字段,您是将varchar(n)类型的列设置为该列中n是最长的条目,还是将其中一个条目的长度超过某个上限时设置为无界字符字段?如果是这样,什么是好的上限?
(3) 如何在不丢失任何位置的情况下,以正确的精度将浮点自动转换为十进制?
显然,这并不意味着你不能(我是一个相当糟糕的程序员)。我希望您能这样做,因为这将是一个非常有用的工具。使用
xlrd
模块。[免责声明:我是作者]xlrd
将单元格分为文本、数字、日期、布尔值、错误、空白和空。它通过检查与单元格相关的格式(例如“dd/mm/yyyy”与“0.00”)来区分日期和数字
编写一些代码来遍历用户输入的数据,从而决定每个列使用哪种DB数据类型,这项工作不是很容易实现自动化的。您应该能够查看数据并指定整数、货币、文本、日期、日期时间、时间等类型,并编写代码检查您的猜测。请注意,您需要能够处理在文本字段中输入的数字或日期数据(在GUI中看起来可以)。您需要一种策略来处理不符合“估计”数据类型的单元格。您需要验证和清理数据。确保规范化文本字符串(去掉前导/尾随空格,用一个空格替换多个空格。Excel文本是(仅BMP)Unicode;不要将其转换为ASCII或“ANSI”--使用Unicode并用UTF-8编码以将其放入数据库中。仅供(我的)参考,我在下面记录了我所做的工作:
LOAD data infle
创建表
,所有列都作为文本,主键除外加载数据本地填充
将所有CSV数据加载到文本字段中PROCEDURE analysis
的输出,我能够更改表
,为列提供正确的类型和长度。PROCEDURE analysis
为任何具有少量不同值的列返回ENUM
,这不是我所需要的,但我发现这对以后的规范化非常有用使用过程分析进行冻结
。PhpMyAdmin建议表结构的输出是垃圾selectdistinct
对列和INSERT
将结果分离到单独的表中。我首先为旧表添加了一列FK。在INSERT
之后,我得到了它的ID并更新了FK列。循环完成后,我删除了旧列,只留下了FK列n、 与多个依赖列类似,它比我预期的要快得多
python manage.py inspctdb
,将输出复制到models.py,并添加了所有那些ForeignkeyField
s,因为FKs在MyISAM上不存在。编写了一些python views.py、url.py和一些模板…TADApandas.read_csv('data.csv').dtypes
参考资料: