gpt4 book ai didi

python - 从 CSV 文件读取数据并从字符串转换为正确的数据类型,包括整数列表列

转载 作者:IT老高 更新时间:2023-10-28 21:11:35 26 4
gpt4 key购买 nike

当我从 CSV 文件读回数据时,每个单元格都被解释为一个字符串。

  • 如何自动将我读入的数据转换成正确的类型?
  • 或者更好:如何告诉 csv 阅读器每列的正确数据类型?

(我写了一个二维列表,其中每一列都是不同的类型(bool、str、int、整数列表),输出到一个 CSV 文件。)

样本数据(CSV 文件):

IsActive,Type,Price,States
True,Cellphone,34,"[1, 2]"
,FlatTv,3.5,[2]
False,Screen,100.23,"[5, 1]"
True,Notebook, 50,[1]

最佳答案

作为 docs explain ,CSV 阅读器不执行自动数据转换。您有 QUOTE_NONNUMERIC 格式选项,但这只会将所有未引用的字段转换为 float 。这是与其他 csv 阅读器非常相似的行为。

我不相信 Python 的 csv 模块对这种情况有任何帮助。正如其他人已经指出的那样,literal_eval() 是一个更好的选择。

以下确实有效并转换:

  • 字符串
  • int
  • float
  • 列表
  • 词典

您也可以将它用于 booleans 和 NoneType,尽管必须对它们进行相应的格式化,以便 literal_eval() 才能通过。当在 Python 中 bool 值大写时,LibreOffice Calc 以大写字母显示 bool 值。此外,您必须将空字符串替换为 None (不带引号)

我正在为执行所有这些操作的 mongodb 编写一个导入器。以下是我目前编写的部分代码。

[注意:我的 csv 使用制表符作为字段分隔符。您可能还想添加一些异常处理]

def getFieldnames(csvFile):
"""
Read the first row and store values in a tuple
"""
with open(csvFile) as csvfile:
firstRow = csvfile.readlines(1)
fieldnames = tuple(firstRow[0].strip('\n').split("\t"))
return fieldnames

def writeCursor(csvFile, fieldnames):
"""
Convert csv rows into an array of dictionaries
All data types are automatically checked and converted
"""
cursor = [] # Placeholder for the dictionaries/documents
with open(csvFile) as csvFile:
for row in islice(csvFile, 1, None):
values = list(row.strip('\n').split("\t"))
for i, value in enumerate(values):
nValue = ast.literal_eval(value)
values[i] = nValue
cursor.append(dict(zip(fieldnames, values)))
return cursor

关于python - 从 CSV 文件读取数据并从字符串转换为正确的数据类型,包括整数列表列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11665628/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com