这是学校的作业,我有一个包含以下数据的文本文件:
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/2018
和23031.0193
的列表,以便可以对值进行统计和计算。非常感谢您的帮助。
这似乎不是错误,它是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]
考虑一下如果使用输入的一部分代码可以正常工作的代码。
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']