繁体   English   中英

解析文本文件并将其存储在列表中

[英]Parsing text file and storing it in a list

我有一个Discount.txt文件,其中包含以下格式的数据:

Less than $100 --> 0%
From $100 up to less than $500 --> 10%
From $500 up to less than $1,000 --> $40 PLUS 20%
From $1,000 up to less than $2,000 --> $140 PLUS 30%
$2,000 and above --> $440 PLUS 40%

这意味着销售金额折扣

Less than $100  0%
From $100 up to less than $500  10% for each dollar over $100
From $500 up to less than $1,000    $40 PLUS 20% of the total sale amount over $500
From $1,000 up to less than $2,000  $140 PLUS 30% of the total sale amount over $1,000
$2,000 and above    $440 PLUS 40% of the total sale amount over $2,000

也就是说,如果总销售金额为$ 100,则折扣为$ 0。 但是,如果总销售金额为$ 101,则折扣为$ 0.10。 如果总销售额为$ 500,则折扣为$ 40,但如果总销售额为$ 501,则折扣为$ 40.20。

因此,为了解决这个问题,我认为应该有4个列表:1个用于存储销售额下限的列表,一个用于存储上限的列表,一个用于存储与范围相对应的固定增量的列表,以及一个用于存储附加折扣的列表。 如果没有固定的增量,则假定为零。

然后,对于给定的销售额,如果它处于ith范围内,则只需执行以下操作:

fixedIncrement[i] + (saleAmount-lowerLimit[i])*additionDiscount[i]

但是面临的问题是解析给定的文本文件。 有人可以帮助解析它并将其存储在python列表中吗

在给定的文件中,列表如下所示:

lowerLimit[] = [1,100,500,1000,2000]
upperLimit[] = [100,500,1000,2000,MAX]
fixedIncrement[] = [0,0,40,140,440]
additionDiscount[] = [0,0.1,0.2,0.3,0.4]

您可以采用以下方法:

  1. 为您的数据创建一个CSV文件。 这将减少读取文件的复杂性。 格式可能类似于:

下限,上限,固定增量,折扣
1,100,0,0
100,500,0,0.1
500,1000,40,0.2

  1. 使用python的csv模块读取文件并将值存储在相应的列表中。 您可以在此处查看有关此文档的文档Python文档
  2. 根据您的公式计算金额。

要打开.txt:

with open ("data.txt", "r") as myfile:
    data=myfile.readlines()

每行应该是列表中的字符串,例如['string one',string two']将每个字符串转换为字符串列表

all_lines = [i.split() for i in data]
>>> all_lines = [['string', 'one'], ['string', 'two']]

for l in all_lines:
    # Go through each line 

从100美元到少于500美元-> 10%转换为:

l = ['From', '$100', 'up', 'to', 'less', 'than', '$500', '-->', '10%']

现在,您应该可以使用逻辑来解析它了。 例如,使范围参数超出此行:

all_ranges = []
r1 = [i for i in l if "$" in i]
if l[0] == 'From':  # Contains a range       
    r = (int(r1[0][1:]), int(r1[1][1:]))
    all_ranges.append(r)

print all_ranges

>>> [(100, 500)]

编辑:

elif l[0] == "Less":   # No range in this line
   r = (0, int(r1[0][1:]))  # Range is from 0 to $100
   all_ranges.append(r)
else:
    top = l[0][1:]
    all_ranges.append((top, 1000000))  # High range

>>>> [(100, 500), (0, 100), (2000, 1000000)]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM