用于猜测当前表示为字符串的数据类型的方法

2024-05-05 21:56:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在解析CSV表,需要发现列的“数据类型”。我不知道这些值的确切格式。显然,CSV解析器输出的所有内容都是一个字符串。我目前感兴趣的数据类型有:

  1. 整数
  2. 浮点型
  3. 日期
  4. 布尔型
  5. 字符串

我现在的想法是测试一个行的样本(可能几百行?)以确定通过模式匹配呈现的数据类型。在

我特别关心日期数据类型-是他们用来解析常见日期习惯用法的python模块(显然我无法检测到它们全部)?在

整数和浮点数呢?在


Tags: 模块csv字符串解析器内容格式整数感兴趣
3条回答

The data types I am currently interested in are...

CSV文件中不存在这些文件。数据只是字符串。只有。没别的了。在

test a sample of rows

除了你在样本中看到的,什么都没有告诉你。示例后面的下一行可以是一个看起来与采样字符串完全不同的字符串。在

处理CSV文件的唯一方法是编写CSV处理应用程序,这些应用程序假定特定的数据类型并尝试转换。你不能“发现”很多关于CSV文件的信息。在

如果列1应该是日期,则必须查看字符串并计算出格式。它可以是任何东西。一个数字,一个典型的美国或欧洲格式的公历日期(无法知道1/1/10是美国还是欧洲)。在

try:
    x= datetime.datetime.strptime( row[0], some format )
except ValueError:
    # column is not valid.

如果列2应该是float,那么只能这样做。在

^{pr2}$

如果列3应该是int,那么只能这样做。

try:
    z= int( row[2] )
except ValueError:
    # column is not valid.

如果CSV有浮点数字字符串,除了对每一行执行float之外,没有办法“发现”。如果某行失败,则有人未正确准备该文件。在

由于您必须执行转换以查看转换是否可行,所以您也可以简单地处理行。它更简单,一次就可以得到结果。在

不要浪费时间分析数据。问问那些创造它的人,那里应该有什么东西。在

在解析日期时想到了Dateutil。在

对于整数和浮点数,您可以在try/except部分尝试强制转换

>>> f = "2.5"
>>> i = "9"
>>> ci = int(i)
>>> ci
9
>>> cf = float(f)
>>> cf
2.5
>>> g = "dsa"
>>> cg = float(g)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for float(): dsa
>>> try:
...   cg = float(g)
... except:
...   print "g is not a float"
...
g is not a float
>>>

ast.literal_eval()可以得到简单的。在

相关问题 更多 >