我有一些带有一些数据的csv,我想用Python创建一个字典。
我这样做
S
但是文件是
with open("file.csv") as f:
for line in f:
dictionary= dict(x.rstrip().split(',', 1) for x in f)
print(dictionary)
我只实现了这个
a,1
b,2
c,3
为什么缺少第一行?
答案 0 :(得分:1)
dict
构造函数不使用line
循环中的for
- 它在其构造函数中使用整个文件。第一行被忽略,当循环返回到顶部时,文件就会耗尽并退出。
with open("file.csv") as f:
dictionary= dict(x.rstrip().split(',', 1) for x in f)
print(dictionary)
答案 1 :(得分:0)
您正在循环f
两次。首先你做:
for line in f:
将line
设置为文件的第一行。然后在该循环中,使用列表理解:
x.rstrip().split(',', 1) for x in f
这将读取f
的剩余行,并将结果列表传递给dict()
构造函数。但由于外部循环读取第一行,因此它不包含在字典中。
然后它回到外循环的顶部。由于文件已被完全读取,因此该循环结束。
正如其他人所指出的那样,解决方案就是摆脱外循环。
with open("file.csv") as f:
dictionary= dict(x.rstrip().split(',', 1) for x in f)
print(dictionary)
答案 2 :(得分:0)
您正在尝试做一些非常复杂的事情,您可以使用csv
模块执行相同操作。
with open("file.csv", 'r') as f: # 'r' > read only
reader = csv.reader(f, delimiter=',') # I am not sure if delimiter is obligatory
file = dict([x for x in reader]) # This make a list of list with reader and then it is turned into a dictionary
return file
为了更好的下调:
file = dict([x for x in reader])
与:
相同file = []
for x in reader:
file.append(x)
file = dict(file)
或者:
file = {}
for x in reader:
file[x[0]] = x[1]