繁体   English   中英

python字典到csv文件

[英]python dictionary to csv file

我正在将字典的内容写入csv文件。 我字典的k,v对是{int:整数列表}。 当将其写入文件=>时,我看到一个有趣的事情,当列表的大小为1时,它将打印为列表。 当列表的大小较大时,它将打印为字符串(双引号)。 这是示例输出(如输出csv文件中所示):

24,[-12345]
25,[-1962956450172838896]
26,"[-125, -12323459939, -2323445, -345425]"
27,[-730881498578617677]
20,[4001623946089138114]
21,[-12345]

我使用以下代码写入文件:

def dictToCsv(dictionary, csvfile):
    writer = csv.writer(open(csvfile, 'wb'))
    for key, value in dictionary.items():
        writer.writerow([key, value])

我很肯定所有值都是整数列表。

我以这种方式创建字典(为简便起见,我缩短了代码):

memberList = []
d = {}

with open(inputCsvFile) as f_in:
   for line in f_in:
   pair = line.split(',')
   cid = pair[0]
   member = pair[1]
   value = member.strip()
   memberList.append(int(value))
   d[cid] = memberList

可能出什么问题了? 我试图在所有阶段打印dict值...它们只是列表。 不知道如何将它们转换为字符串。 我只是不想在输出的csvfile中使用双引号。

任何帮助表示赞赏。

列表以列表的字符串表示形式发送到csv文件。 如果列表中有多个项目,则需要在csv文件中加引号,因此,将列表中的项目定界的逗号不会误认为是将csv文件中的字段定界的逗号。

CSV文件中唯一的数据类型是字符串。 如果您使用csv模块将该csv文件重新读回到python,则会返回["25", "[-1962956450172838896]"]作为第2行的值,以及["26", "[-125, -12323459939, -2323445, -345425]"]用于第3行。

如果要避免在列表中加引号,则可以在创建csv文件时通过设置delimiter参数来使用其他定界符。 制表符分隔的( \\t )在这里可以很好地工作。

dictToCsv需要以这种方式修复

def dictToCsv(dictionary, csvfile):
    writer = csv.writer(open(csvfile, 'wb'))
    for key, value in dictionary.items():
       # writer.writerow([key, value]) << wrong
       writer.writerow([key] +  value)

这将产生一个如下的csv文件:

20,4001623946089138114
21,-12345
24,-12345
25,-1962956450172838896
26,-125,-12323459939,-2323445,-345425
27,-730881498578617677

每行的第一个元素是键,后续元素是关联的列表值

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM