如何在python中的多个点分割值

问题描述 投票:1回答:1

这是学校的作业,我有一个包含以下数据的文本文件:

8/28/2018|26064.01953
8/29/2018|26124.57031
8/30/2018|25986.91992
8/31/2018|25964.82031
9/4/2018|25952.48047
9/5/2018|25974.99023
9/6/2018|25995.86914

在同一行上有很多条目都采用这种格式。我的任务是创建一个导入文本文件的应用程序,并完成以下操作以显示给用户。

  • 全年的平均收盘价。
  • 每月平均收盘价
  • 最高收盘价和发生日期。
  • 最低收盘价及其发生的日期。
  • 将价格从最低到最高排序,并将排序后的列表写入名为DJI_Sorted的新文本文件中。
def main ():
    infile = open('DJI.txt', 'r')
    values = infile.read()
    infile.close()
    values = (values.strip() for value in values.split("|") for value in values.split("/"))
    print(values) 
main() 

运行此代码后,出现以下错误:

<generator object main.<locals>.<genexpr> at 0x028F90B0>

我正在尝试将8/28/2018|26064.01953分为8/28/201823031.0193的列表,以便可以对值进行统计和计算。非常感谢您的帮助。

python python-3.x
1个回答
2
投票

这似乎不是错误,它是python Repr(表示形式)。

原因是您正在使用生成器表达式。打印生成器表达式会打印出生成器的repr,而不是值。

更改

values = (values.strip() for value in values.split("|") for value in values.split("/"))

to

values = [values.strip() for value in values.split("|") for value in values.split("/")]

但是,这似乎并没有像您希望的那样分裂。我建议分两个步骤进行简化。首先在空格(“”)上拆分值以获得单个值的列表。然后在“ |”上分割获取列表列表,内部列表是日期/值对。

    values=values.split(" ")
    values=[value.split("|") for value in values]

0
投票

考虑一下如果使用输入的一部分代码可以正常工作的代码。

values = "8/28/2018|26064.01953 8/29/2018|26124.57031"

values = (values.strip() for value in values.split("|") for value in 
    values.split("/"))

split("/")函数将返回字符串列表。您的行现在看起来像这样:

[8][28][2018|26064.01953 8][29][2018|26124.57031]

接下来,您将在每个项目上调用split("|")

[8][28][2018][26064.01953 8][29][2018][26124.57031]

接下来,您将在每个项目上调用strip()

[8][28][2018][26064.01953 8][29][2018][26124.57031]

仅会删除开头和结尾的空格,尽管这里没有任何空格。

最后,您将每个元素分别分配给值,只剩下这个:

[26124.57031]

这是一种与众不同的方法:

values = "8/28/2018|26064.01953 8/29/2018|26124.57031"
output = []

firstList = values.split("/")

for el in firstList:
    secondList = el.split("|")
    for el2 in secondList:
       thirdList = el2.split()
       for el3 in thirdList:
           output.append(el3.strip())

print(output)

对于片段,它会给你这个:

['8', '28', '2018', '26064.01953', '8', '29', '2018', '26124.57031'] 
© www.soinside.com 2019 - 2024. All rights reserved.