在python中从字符串中提取数据

在python中从字符串中提取数据,python,string,python-2.7,floating-point,Python,String,Python 2.7,Floating Point,我有一个.csv文件,其中的数据按行构造为[datetime,”(data1,data2)”],并且我已成功地将数据作为time和temp导入python,我面临的问题是如何将temp字符串以浮点格式拆分为两个new_temp列,以便以后打印时使用 到目前为止,我的代码是: import csv import matplotlib.dates as dates def getColumn(filename, column): results = csv.reader(open('log

我有一个.csv文件,其中的数据按行构造为
[datetime,”(data1,data2)”]
,并且我已成功地将数据作为
time
temp
导入python,我面临的问题是如何将
temp
字符串以浮点格式拆分为两个
new_temp
列,以便以后打印时使用

到目前为止,我的代码是:

import csv
import matplotlib.dates as dates

def getColumn(filename, column):
    results = csv.reader(open('logfile.csv'), delimiter = ",")
    return [result[column] for result in results]
time = getColumn("logfile.csv",0)
temp = getColumn("logfile.csv",1)
new_time = dates.datestr2num(time)
new_temp = [???]
当我
打印温度时
我得到
['(0.0,0.0)'(64.4164,66.2503)'(63.4768,65.4108)'(62.7148,64.6278)'(62.0408,63.9625)'(61.456,63.2638)'(61.0234,62.837)'(60.6823,62.317)

如果有人能帮助我,请提前感谢。

从中的答案开始

你有一个双元组数组

我取消了这篇文章的删除,并给出了完整的答案,因为它显然不够清晰,无法引用另一篇文章。

从中的答案开始

你有一个双元组数组

我取消删除了这篇文章,并给出了完整的答案,因为它显然不够清晰,无法引用另一篇文章。

您可以使用以下代码:

import re
string = "['(0.0, 0.0)', '(64.4164, 66.2503)', '(63.4768, 65.4108)', '(62.7148, 64.6278)', '(62.0408, 63.9625)', '(61.456, 63.2638)', '(61.0234, 62.837)', '(60.6823, 62.317)']"
data = re.findall('[+-]?\d+\.\d+e?[+-]?\d*', string)
data = zip(data[0::2], data[1::2])
print [float(d[0]) for d in data]
print [float(d[1]) for d in data]
您可以使用以下代码:

import re
string = "['(0.0, 0.0)', '(64.4164, 66.2503)', '(63.4768, 65.4108)', '(62.7148, 64.6278)', '(62.0408, 63.9625)', '(61.456, 63.2638)', '(61.0234, 62.837)', '(60.6823, 62.317)']"
data = re.findall('[+-]?\d+\.\d+e?[+-]?\d*', string)
data = zip(data[0::2], data[1::2])
print [float(d[0]) for d in data]
print [float(d[1]) for d in data]


如果它已经被回答了,把它作为一个评论,而不是一个答案。例如,@user3387223可能重复:谢谢分享。如果已经回复,请将其作为评论发布,而不是回复。例如,@user3387223的可能副本:谢谢分享。可能的副本作为旁注,您应该只阅读CSV一次,然后提取列。目前,您一遍又一遍地读取整个文件。我选中了该解决方案并编写了make_tuple(temp),得到了错误:ValueError:格式错误的字符串。我还尝试了temp[1:-1].split(“,”)中x的元组(int(x)),得到了错误:AttributeError:“list”对象没有属性“split”我的解决方案有问题吗?它应该会起作用。感谢那个似乎创造了魔法的人。作为旁注,您应该只阅读CSV一次,然后提取列。目前,您一遍又一遍地读取整个文件。我选中了该解决方案并编写了make_tuple(temp),得到了错误:ValueError:格式错误的字符串。我还尝试了temp[1:-1].split(“,”)中x的元组(int(x)),得到了错误:AttributeError:“list”对象没有属性“split”我的解决方案有问题吗?它应该会起作用。感谢那个似乎创造了魔法的人。如果你有一些不同格式的浮动(例如5.2456e10),这将失败。更好地使用Python的内置解析器来评估注释中建议的字符串中的Python表达式。没有提到特殊格式,但感谢您的建议。它是否适用于5.2456e-10、5.2456e+9、-5.2456e-10、.1、1。?是的,现在可以,但我相信您会发现另一种情况;-)Deutsche Korrektheit是什么?我发现用户3387223的建议非常重要,因此我再次改进了解决方案,以允许负值。如果您有一些格式不同的浮点(例如5.2456e10),则此操作将失败。更好地使用Python的内置解析器来评估注释中建议的字符串中的Python表达式。没有提到特殊格式,但感谢您的建议。它是否适用于5.2456e-10、5.2456e+9、-5.2456e-10、.1、1。?是的,现在可以,但我相信您会发现另一种情况;-)Deutsche Korrektheit是什么?我发现user3387223的建议非常重要,所以我再次改进了解决方案,允许出现负值。