0

杂货库存.txt 包含

柠檬水 6 1.1

面包 34 1.43

筹码 47 3.76

香蕉 16 0.79

比萨饼 15 5.0

这是我到目前为止为它编写的代码。

    infile=open("grocery_stock.txt", 'r+')
    lines=infile.readlines()
    line=infile.readline()
    none= ' '
    count = 0
    index= 0
    while line !=none:
        line1=infile.readline()

        while line1 in lines:

            line1=line1.split()
            name1=str(line1[:0])
            quant1=(str(line1[:1]))
            price1=[(str(line1[:2]))]
            grocerystock[name1[0]]=(quant1,name1)

            print (grocerystock)

        line2=infile.readline()
        for line2 in line:
            line1=line2.split()
            name1=str(line1[0])
            quant1=(str(line1[1]))
            price1=[(str(line1[2]))]
            grocerystock[name1[1]]=(quant1,name1)
            print (line1[1], line[2],line1[0])
            print (grocerystock)

        line3=infile.readline()
        line4=infile.readline()
        line5=infile.readline()
    infile.close()

    grocerystock={} 

我这样做的原因是因为稍后在我的项目中,我将不得不删除一些键并更改一些值,所以我想要一个函数,当我读取文件以将数据转换为字典时,我可以在程序的任何地方调用该函数。

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

此外,正如您所看到的,我还没有完成第 5 行,我认为找出正确的循环而不是输入随机循环并看看会发生什么会更好。

先感谢您。

4

4 回答 4

0

也许这会有所帮助:

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
于 2012-04-16T22:13:40.083 回答
0

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

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]]

由于这是家庭作业,因此我鼓励您研究此解决方案以及其他解决方案。我不能只你答案,现在可以吗?

于 2012-04-16T22:14:05.107 回答
0

只是一些提示,因为这是硬件:

  • 尝试使用上下文管理器打开文件,即语句with
  • 即使while没有错,在这种情况下我更喜欢 for 循环(迭代次数是固定的 - 行数)——我有时认为 while 循环是解决停止问题的途径......
  • 尝试使用readlines(),因为行数可能很少;或使用这样的东西(看起来很自然):

    for line in f:
        # do something with line
    
于 2012-04-16T22:15:13.037 回答
0

当您使用open()并获得文件对象时,您可以迭代文件对象。像这样:

for line in f:
    # do something with the line

我推荐上述方法,而不是f.readline()循环调用。

f.readlines()将整个文件读入内存,并建立一个输入行列表。对于非常大的文件,这可能会导致性能问题。对于您在此处使用的小文件,它可以工作,但如果您学习标准 Python 习惯用法,您可以将它用于小文件或大文件。

于 2012-04-16T22:22:14.937 回答