【问题标题】:python: How to display data of a text filepython:如何显示文本文件的数据
【发布时间】:2021-06-18 08:58:17
【问题描述】:

我正在尝试读取此文本文件并显示其数据。我应该报告产品名称、价值和最有价值的产品。我在最后添加了到目前为止我尝试过的事情:

Here is how the text file looks like:
item name 1 ex: hats 
quantity of item 1 ex: 12 
unit price of item 1 ex: 5.9   
item name 2 ex: jacket
quantity of item 2 ex: 13
unit price of item 2 ex: 29.9


Expected output
12 hats at 5.9 the unit. total value: 70.8
13 jackets at 29.9 the unit. total value: 390
total inventory value: 460.8
most valuable inventory: jacket: 390

到目前为止我尝试过的事情:

filename = "store.txt"

with open(filename) as f:
    content = f.read().splitlines()

content_list = [content[i * 3:(i + 1) * 3] for i in range((len(content) + 3 - 1) // 3)]

total_value = 0

for items in content_list:
    value = float(items[2])*(float(items[1]))
    print(items[1],'', items[0], '@ $', items[2], '. Value: $', value)

    total_value += value


#max_value = max(value)

print('')
print('total value: '+ str(total_value))
#print('Highest value item: ' + str(max_value))

【问题讨论】:

  • 请展示您的尝试
  • 是的,我的错,我将编辑并添加我尝试过的内容。
  • 我刚刚添加了新的编辑
  • 更多pyhonic(更好的做法)被认为是使用with而不是openclose,因为with语句会自动关闭从而避免潜在的错误。

标签: python list file readline


【解决方案1】:

从你可以使用的文本文件中获取特定的东西

python重新打包

link如果想了解更多关于这个包的信息

      re.split(pattern, string, flags=0)

这将返回一个列表

       lis = [my_list[i * n:(i + 1) * n] for i in range((len(my_list) + n - 1) // n )] 

       n=size you want to break them in 
       my_list=the list you want to break

      


     file = open("store.txt")

     lis=[]
     for line in file:
     if(line.startswith("item")):
         item_name=line[line.find(":")+1:]
         lis.append(item_name.strip())
     elif(line.startswith("quantity")):
         quantity=line[line.find(":")+1:]
         lis.append(float(quantity))
     elif(line.startswith("unit")):
         unit=line[line.find(":")+1:]
         lis.append(float(unit))

    


     content_list = [lis[i * 3:(i + 1) * 3] for i in range((len(lis) + 3 - 1) // 3)]
     print(content_list)
     total_value=0
     lis2=[]
     for items in content_list:
          value = (items[2])*(items[1])
          print(items[1],'', items[0], '@ $', items[2], '. Value: $', value)
          lis2.append(value)
          total_value+=value


      max_value = max(lis2)

      print('')
      print('total value: '+ str(total_value))
      print('Highest value item: ' + str(max_value))

【讨论】:

  • 是否可以将一个数组拆分为包含 3 个元素的多个数组?从这个意义上说,我试图这样做:['carrots', '10', '1.2', 'apples', '13', '0.6', 'bananas', '16', '1.7']->[[carrots, 10,1.2], [apples,13,0.6]...]
  • 是的,这是可能的,我只是在我的回答中写了你如何做到这一点
  • 我设法做到了,并将数组转换为元组:(('carrots', '10', '1.2'), ('apples', '13', '0.6'), ('bananas', '16', '1.7')) 我不知道如何处理它,我应该使用索引吗?
  • 哦,好吧,我刚看到你的回答。也许列表比元组更容易处理
  • 元组是不可变的,因为列表是可变的,因此使用列表更容易,如果您想更新值,您可以在列表中执行此操作
【解决方案2】:

有很多选择。这是一种(流行的方法)开始:

filename = "file.py"

with open(filename) as f:
    content = f.readlines()

print(content)

然后您需要应用所需的逻辑(提取和操作文本)并将其写回不同的文件或作为输出提供。

【讨论】:

  • 我试过了,但是请检查输出:['carrots\n', '10\n', '1.2\n', 'apples\n', '13\n', '0.6\n', 'bananas\n', '16\n', '1.7\n']我怎样才能删除\n(新行)?
  • 用这个:stackoverflow.com/questions/15233340/… 总而言之是f.read().splitlines()
  • 谢谢你,成功了。我想我会将数组拆分为每个包含 3 个元素的多个数组,然后从那里进行处理
  • 当然,根据文件的结构,您可能最好使用pandas.read_csv()
猜你喜欢
  • 2014-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多