【问题标题】:Determine the data type of csv and print as column in Python确定csv的数据类型并在Python中打印为列
【发布时间】:2016-04-17 20:33:09
【问题描述】:

我有一个数 MB 的文本文件,其中包含用逗号分隔的随机数据类型:

bgh5w ,12, 5.223, ab4ft55, ....

只有四种类型的数据:整数、浮点数、字母和字母数字。 如何以列的形式打印出数据类型?:

bgh5w - 字母数字

12 - 整数

5.223 - 浮动

ab4ft55 - 字母数字

。 . .

【问题讨论】:

  • 要使用哪些工具?在诸如 Perl 之类的东西中,这是一个单行的,在 C 中它有点工作......
  • 嗨,我正在使用 Python。

标签: python csv types


【解决方案1】:

这通常是不可能的。 CSV 数据必须附带元数据,即有关数据本身的信息。

但是.... 您可以做的是读取文件的某些部分(或全部读取)并使用启发式方法决定为每一列使用哪种数据类型。然后进行第二遍读取数据并将其转换为适当的数据类型(在第一遍中找到)。

在第一次通过时,您可以保留有关每列的一些真/假(又名布尔)信息,例如“hasDecimalDigit”(如果在某行中找到字符“0”到“9”),“hasHexadecimalDigit”(对于字符 'a' 到 'f')、“hasPeriod”(用于 '.')、“hasMoreThanOnePeriod”(用于 '.' 当“hasPeriod”已经为真时)、“hasAlphaCharacter”(用于字符 'a' 到 'z' ), 等等。在读取任意数量的行后,您可以决定信息集的特定模式,哪种数据类型适用(例如:hasDecimalDigit & !hasHexadecimalDigit & !hasAlphaCharacter & !hasPeriod -> datatype = int, format = decimal)。

【讨论】:

  • 如果给定文件中只有4种数据怎么办? (整数、浮点数、字母、字母数字)
  • 我之前所说的仍然适用。启发式肯定会更简单(也就是说,要测试的布尔特征更少)。
  • 如果您对此答案仍有疑问,请展示您已经完成的工作(编辑您的原始帖子并包含您的源代码,到目前为止您已完成的工作)。
【解决方案2】:

如果您有一个文本文件,那么您拥有的唯一数据类型是字符串。我的建议是使用映射文件,您可以在其中查找列 # 到数据类型,此时它应该非常简单地通过您的进程加载数据。映射文件应与 CSV 一起交付,因为需要深入了解 CSV 中包含的数据的性质。

【讨论】:

  • 如果给定文件中只有4种数据怎么办? (整数、浮点数、字母、字母数字)
  • 当您从文件中读取列值时,您会返回一个字符串类型,那么您应该使用 isalpha()、isdigit()、isalnum() 来检测您列出的 4 个案例中的 3 个.任何整数都可以被认为是浮点数,除非您解析该值并且假设如果没有小数部分您想要一个整数,否则这真的很难说。 docs.python.org/2/library/stdtypes.html#string-methods 正如其他用户已经说过的,发布您的代码并更具体地说明是什么阻止了您。
猜你喜欢
  • 2018-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多