当我从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]
如文档所述,CSV阅读器不会执行自动数据转换。您具有QUOTE_NONNUMERIC格式选项,但这只会将所有未引用的字段转换为浮点数。这与其他csv阅读器非常相似。
我不认为Python的csv模块对这种情况完全没有帮助。正如其他人已经指出的那样,这literal_eval()
是一个更好的选择。
以下内容可以工作并进行转换:
您也可以将其用于boolean和NoneType,尽管它们必须相应地进行格式化literal_eval()
才能通过。LibreOffice
Calc在Python中将布尔值大写时,以大写字母显示布尔值。另外,您还必须将空字符串替换为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
下面是一些示例代码:
有没有人能帮我解决这个问题 当我在编写这个时,它显示了数字格式异常,我在Java正处于起步阶段,所以请帮助我解决这个问题,非常感谢
稍后,我尝试使用pyspark从s3读取csv文件,created_date列datatype更改为timestamp。 有人知道为什么created_date列数据类型在从S3读取文件时改为timestamp而不是date吗?其实我在阅读的时候正在寻找日期数据类型,我很感激你的帮助!
我正在做一些关于Java8流特性的练习,所以我想把这些知识应用到将数字串转换成整数列表的问题上 一个典型的测试看起来像
问题内容: 我正在从包含以下数据的CSV文件(xyz.CSV)中读取数据: 当我使用循环对其进行迭代时,我可以按以下代码逐行打印数据,并且仅打印column1数据。 通过上面的代码,我只能得到第一列。 如果我尝试打印line [1]或line [2],则会出现以下错误。 请建议打印列2或列3的数据。 问题答案: 这是我获得第二列和第三列的方法: 结果如下: