打开文件不要在python3中存储第一行

时间:2017-04-27 15:57:55

标签: python python-3.x

我有一些带有一些数据的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

为什么缺少第一行?

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]