将文本文档坐标“x,y”转换为浮点列表对象

时间:2015-11-08 13:06:09

标签: python kivy

我有一个文本文件,其中包含我想要放入基于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类型。

3 个答案:

答案 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)