标签:python-2-5 python csv
我有以下问题.我写了一个二维列表,其中每列具有不同的类型(bool,str,int,list),到csv文件.
现在我想再次从csv文件中读出数据.但我读到的每个单元都被解释为一个字符串.
如何自动将读入数据转换为正确的类型?或者更好:是否有可能告诉csv-reader每列的正确数据类型?
示例数据(如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格式选项,但这只会将所有非引用字段转换为浮点数.这与其他csv读者非常相似.
我不相信Python的csv模块对这种情况有任何帮助.正如其他人已经指出的那样,literal_eval()是一个更好的选择.
以下工作和转换:
>字符串
> int
>漂浮
>列表
>字典
您也可以将它用于布尔值和NoneType,尽管必须相应地格式化它们才能传递literal_eval(). LibreOffice Calc以大写字母显示布尔值,而在Python布尔值为大写时.此外,您必须用空(无引号)替换空字符串
我正在为mongodb写一个进口商来做这一切.以下是我到目前为止编写的代码的一部分.
[注意:我的csv使用tab作为字段分隔符.您可能还想添加一些异常处理]
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-2-5,python,csv 来源: https://codeday.me/bug/20190923/1815618.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。