python 生成检查Excel(CSV)的表模式并导入数据

tcomlyy6  于 2023-03-11  发布在  Python
关注(0)|答案(5)|浏览(114)

我该如何创建一个MYSQL表模式来检查Excel(或CSV)文件呢?有没有现成的Python库来完成这项任务?
列标题将被清理为列名。数据类型将根据电子表格列的内容进行估计。完成后,数据将被加载到表中。
我有一个包含约200列的Excel文件,我想开始对其进行规范化。

mzsu5hc0

mzsu5hc01#

使用xlrd模块;start here。[免责声明:I 'm the author]. xlrd将单元格分为文本、数字、日期、布尔值、错误、空白和空。它通过检查与单元格相关的格式(例如“dd/mm/yyyy”与“0.00”)来区分日期和数字。
编写一些代码来浏览用户输入的数据以决定每一列使用什么DB数据类型的工作并不容易自动完成。您应该能够浏览数据并分配类型,如整数、货币、文本、日期、日期时间、时间,等等,并编写代码来检查你的猜测。注意,你需要能够科普像数字或日期数据输入文本字段的事情(在GUI中看起来可以)。您需要一个策略来处理不适合“估计”数据类型的单元格。您需要验证和清理数据。确保规范化文本字符串(去除前导/尾随空格,用单个空格替换多个空格。Excel文本是(仅限BMP)Unicode;不要将其转换为ASCII或“ANSI”--使用Unicode并以UTF-8编码以将其放入数据库中。

svdrlsy4

svdrlsy42#

使用phpmyadmin的快速和肮脏的变通方法:

  • 创建一个包含适当列数的表。确保数据与列相匹配。
  • 将CSV导入表中。
  • 使用 * 建议表结构 *。
1szpjjfi

1szpjjfi3#

据我所知,没有工具可以自动化这个过程(我希望有人能证明我错了,因为我以前也遇到过这样的问题)。当我这样做的时候,我想到了两个选择:
(1)在数据库中手动创建具有适当类型的列,然后导入,或者
(2)编写某种类型的过滤器来“判断”列应该是什么数据类型。我选择第一个选项主要是因为我认为我实际上无法编写一个程序来进行类型推断。
如果你决定编写一个类型推断工具/转换,这里有几个问题你可能必须处理:
(1)Excel日期实际上存储为自1899年12月31日以来的天数;那么如何推断一列是日期而不是某个数字数据(例如人口)呢?
(2)对于文本字段,你是只把列设为varchar(n)类型,其中n是该列中最长的条目,还是如果其中一个条目的长度超过了某个上限,你就把它设为无界字符字段?如果是这样,什么是好的上限?
(3)如何自动将浮点数转换为具有正确精度且不丢失任何位数的小数?
显然,这并不意味着你不能(我是一个相当糟糕的程序员),我希望你能,因为它将是一个非常有用的工具。

yeotifhr

yeotifhr4#

Pandas可以返回架构:

pandas.read_csv('data.csv').dtypes

参考文献:

ws51t4hk

ws51t4hk5#

仅供参考,我将我所做的记录如下:

  1. XLRD是实用的,但是我刚刚将Excel数据保存为CSV,所以我可以使用LOAD DATA INFILE
    1.我已经复制了标题行,并开始编写导入和规范化脚本
    1.脚本:CREATE TABLE,除主键外,所有列均为TEXT
    1.查询mysql:LOAD DATA LOCAL INFILE将所有CSV数据加载到文本字段中。
    1.基于PROCEDURE ANALYSE的输出,我能够使用ALTER TABLE为列指定正确的类型和长度。PROCEDURE ANALYSE为具有很少不同值的任何列返回ENUM,这不是我所需要的,但我发现这在以后的规范化中很有用。使用PROCEDURE ANALYSE浏览200列是轻而易举的事。PhpMyAdmin propise table structure的输出是垃圾。
    1.我写了一些规范化,主要是在列上使用SELECT DISTINCT,在结果中使用INSERT来分隔表。我首先在旧表中添加了一个FK列。我已经得到了它的ID和FK列的UPDATE。当循环结束时,我已经删除了旧列,只留下FK列。类似于多个依赖列。它比我预期的要快得多。
    1.我运行了(django)python manage.py inspctdb,将输出复制到models.py,并添加了所有这些ForeignkeyField,因为MyISAM上不存在FK。写了一个小Pythonviews.pyurls.py,一些模板...TADA
    根据https://www.get-information-schools.service.gov.uk/Downloads中的数据创建https://blocl.uk/schools

相关问题