0

在像这样的文件中:

 jaslkfdj,asldkfj,,,
 slakj,aklsjf,,,
 lsak,sajf,,,

你怎么能把它分开,所以这两个词只有一个键值对?我尝试使用逗号进行拆分,但我知道如何制作键/值对的唯一方法是一行中只有一个逗号。

由于每行末尾有 3 个额外的逗号,python 给出了错误:“ValueError: too many values to unpack (expected 2)”

这就是我所拥有的:

newdict= {}
wd = open('file.csv', 'r')
for line in wd:
      key,val = line.split(',')
      newdict[key]=val
print(newdict)
4

3 回答 3

2

您尝试的似乎更有可能是这样的:

>>> line = 'jaslkfdj,asldkfj,,,'
>>> key, value = line.split(',')
ValueError: too many values to unpack (expected 2)

有两种方法可以解决这个问题。

首先,您可以拆分,然后只取前两个值:

>>> line = 'jaslkfdj,asldkfj,,,'
>>> parts = line.split(',')
>>> key, value = parts[:2]

或者你可以使用一个maxsplit参数:

>>> line = 'jaslkfdj,asldkfj,,,'
>>> key, value = line.split(',', 1)

第二个会在 末尾留下额外的逗号value,但这很容易解决:

>>> value = value.rstrip(',')
于 2013-10-10T22:05:43.203 回答
2

尝试对前两个值进行切片:

"a,b,,,,,".split(",")[:2]

这个答案中切片符号的很好总结。

于 2013-10-10T22:05:18.133 回答
0
with open('file.csv', 'r') as wd:
    newdict = dict(line.split(",")[:2] for line in wd.read().splitlines())

print newdict

结果如下:

{' jaslkfdj': 'asldkfj', ' lsak': 'sajf', ' slakj': 'aklsjf'}

于 2013-10-10T22:09:12.990 回答