我有一个文本文件,其中包含我想要放入基于python的图形的坐标(图形来自kivy.garden.graph模块,我已经工作了)。
当我使用open()。read()时,文本文件如下所示:
(0, 1.836957)
(1, 1.836995)
(2, 1.837073)
(3, 1.837111)
(4, 1.837111)
是字符串类型。我需要它进入图形模块:
[(0, 1.836957), (1, 1.836995), (2, 1.837073), (3, 1.837111), (4, 1.837111)]
注意,文本文件将实时更新,图形模块可以处理。或者充其量,选择最后创建的10 x,y点。此外,我可以操作文本文件,因为我自己从外面的另一个函数输出它。
为此简单道歉,但在过去的24小时里,我一直在努力转换它。我只是设法得到了这个:
(逗号末尾后的空格)
[(0, 1.836957), (1, 1.836995), (2, 1.837073), (3, 1.837111), (4, 1.837111), ]
注意额外的逗号和空格,它只能通过使用replace()的字符串操作,而不是我需要的是float类型。
答案 0 :(得分:1)
根据您提供的输入和您尝试实现的输出,您可以使用literal_eval中的ast。
此外,对于此特定情况,如果您使用readlines()而非$USER1$/check_http -H $ARG1$ -p $ARG2$ $ARG3$
,则可能更容易管理数据。 read()
会为您提供一份清单。
看看这个:
readlines
输入:
import ast
x = list(ast.literal_eval(','.join(i.strip() for i in open('some_file').readlines())))
输出:(类型将是一个列表)
(0, 1.836957)
(1, 1.836995)
(2, 1.837073)
(3, 1.837111)
(4, 1.837111)
答案 1 :(得分:0)
根据我的经验,如果将数据保存为以下内容会更容易: number1 \ t number2 \ n 无论如何,做你想做的事情的一个选择是:
import json # This library has lost os ways to load and save data
f=open('file.txt','r')
# Remove the \n at the end of each line and replace () for []
# Create the data with all the tuples.
# json only reads list, thats why we have to transforn it into a tuple at the end
data=[tuple(json.loads(l[:-1].replace('(','[').replace(')',']'))) for l in f]
f.close()
这应该有效。如果文件如果更新我认为你应该再次打开它将工作
答案 2 :(得分:0)
使用save()
和strip
方法将每一行分成适当的坐标。
split
通过列表理解,可以更有效地完成整个事情;以上内容更具可读性。
with open("myfile.txt") as fh:
coords = []
for line in fh:
line = line.strip('()\n') # Get rid of the newline and parentheses
line = line.split(', ') # Split into two parts
c = tuple(float(x) for x in line) # Make the tuple
coords.append(c)