python:读入表并将每一列转换为正确的数据类型

标签 python

假设我有一个文本文件,其中包含如下行:

3, 4.32, hi
7, 3.23, hello

当我读入这个文件时,所有条目都被视为字符串。有没有办法将它们自动转换(在我的示例中)为 int、float 和 string?

最佳答案

原始方法:

def guess(text):
    for t in text.split(','):
        for typ in (int, float, str):
            try:
                yield typ(t)
                break
            except ValueError as e:
                pass

d = '3, 4.32, hi'

print list(guess(d))
# [3, 4.32, ' hi']
# [<type 'int'>, <type 'float'>, <type 'str'>]

但是 - 如果您知道类型应该是什么,那么这比像这样的暴力强制要好得多...

并且您可以利用 ast 库来完成一些工作,这可能会更灵活,需要更少的 try/except 机制(并且读取起来更容易一些,但确实需要一些预处理输入的工作)

def guess2(text):
    from ast import literal_eval
    tokens = (t.strip() for t in text.split(','))
    for token in tokens:
        try:
            token_value = literal_eval(token)
            token_type = type(token_value)
            yield token_value, token_type
        except ValueError as e:
            yield token, type(token)

关于python:读入表并将每一列转换为正确的数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13997973/

相关文章:

python - 艰难地学习 Python 练习 11

python - 合并索引包含另一个(但不相同)的数据帧

python - 将两个 pandas DataFrame 与一个唯一的列组合起来,并保留行索引 (Python)

Python 根据来自另一个数据帧的多个条件为新数据帧分配值,例如时间表

python - 如何在Python中设置桌面背景? ( window )

python - 在正则表达式中查找具有相同字符串的两个匹配项

Python 导入模块时遇到问题

python - 定位列表中重复项的位置及其位置

python - 如何使用内容编码 : gzip with Python SimpleHTTPServer

python - 通过 Django-celery 安排数千个一次性(非经常性)任务以近乎同时执行