Python 试图找出将多行处理到字典中的正确循环

Python 试图找出将多行处理到字典中的正确循环,python,python-3.x,Python,Python 3.x,screery_stock.txt包含 lemonade 6 1.1 bread 34 1.43 chips 47 3.76 banans 16 0.79 pizza 15 5.0 我这样做的原因是,在我的项目的后面,我将不得不删除一些键并更改一些值,因此我需要一个函数,当我读取文件以将数据转换为字典时,我可以在程序的任何位置调用该函数 我的循环在你看来可能很疯狂,但我当时正在尝试任何突然出现在我脑海中的东西 正如你所看到的,我还没有读完第5行,我认为最好找出正确的循环,而不是键入随机循

screery_stock.txt包含

lemonade 6 1.1 bread 34 1.43 chips 47 3.76 banans 16 0.79 pizza 15 5.0 我这样做的原因是,在我的项目的后面,我将不得不删除一些键并更改一些值,因此我需要一个函数,当我读取文件以将数据转换为字典时,我可以在程序的任何位置调用该函数

我的循环在你看来可能很疯狂,但我当时正在尝试任何突然出现在我脑海中的东西

正如你所看到的,我还没有读完第5行,我认为最好找出正确的循环,而不是键入随机循环,看看会发生什么


提前谢谢。

也许这会有帮助:

with file('grocery_stock.txt') as f:
    lines = f.readlines()

# filter out empty lines
lines = [line for line in lines if line.strip() != '']

# split all lines
lines = [line.split() for line in lines]

# convert to a dictionary
grocerystock = dict((a, (b, c)) for a, b, c in lines)

# print
for k, v in grocerystock.items():
    print k, v

唯一需要的循环是逐行移动数据的循环。这可以通过以下方式实现:

with open("grocery_stock.txt", "r+") as f:
    for line in f: # Changed to be a more elegant solution; no need to use while here.
        # Here we would split (hint) the line of text.
        dict[split_text[0]] = [split_text[1], split_text[2]]

因为这是个家庭作业,我鼓励你和其他人一样研究这个解决方案。我不能只是给你答案,现在可以吗?

只是一些提示,因为这是HW:

尝试使用上下文管理器打开文件,即, 即使while没有错,我还是更喜欢for循环在这种情况下迭代次数是固定的-行数-我有时认为while循环是。。。 尝试使用,因为行数可能很小;或者使用这样看起来很自然的东西:

for line in f:
    # do something with line
当您使用open并获得一个file对象时,您可以在file对象上进行迭代。像这样:

for line in f:
    # do something with the line
我建议使用上述方法,而不是在循环中调用f.readline


f、 readlines将把整个文件读入内存,并建立一个输入行列表。对于非常大的文件,这可能会导致性能问题。对于像您在这里使用的小文件,它会起作用,但如果您学习了标准Python习语,您可以将其用于小文件或大文件。

您对这段代码有什么疑问?@SvenMarnach是的,您建议使用什么样的循环来处理行并将其转换为字典可能对家庭作业没有用处,但是有一个简单的方法:{row[0]:row[1:]代表line中的row.split代表openfilename中的line}。这正是我想要的工作方式,谢谢!我唯一的问题是我不太熟悉操作,我该如何写入文件?当我尝试我知道的方法时,我得到了f.writegrocestock值error:对关闭的文件执行i/O操作。从这一点来看,它会自动关闭。很高兴再次浏览论坛。谢谢。你知道有什么方法可以在最后添加“\n”以便我可以将其写入文件吗?不,你不能:谢谢你的输入,它帮助我从不同的角度看它!
for line in f:
    # do something with the line