2016-07-11 3 views
0

У меня есть CSV-файл с данными, построенными в [datetime, "(data1, data2)"] в строках и мне удалось импортировать данные в питон, как time и temp, проблема я столкнулся, как я отделите temp строку на две колонки new_temp в формате float для последующего использования в дальнейшем?Извлечение данных из строки в Python

Мой код до сих пор:

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 = [???] 

Когда я print 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)',...etc]

Если кто-то может помочь мне, то спасибо заранее.

+1

Возможный дубликат (http://stackoverflow.com/questions/9763116/parse-a-tuple-from- a-string) –

+0

Как примечание, вы должны прочитать CSV только один раз, а затем извлечь столбцы. В настоящее время вы читаете весь файл снова и снова. – CodeMonkey

+0

Я проверил это решение и написал make_tuple (temp) и получил ошибку: ValueError: неверная строка. И я также попробовал кортеж (int (x) для x в temp [1: -1] .split (',')) и получить ошибку: AttributeError: объект «list» не имеет атрибута «split» –

ответ

1

Вы можете использовать этот код: [? Разбираем кортеж из строки]

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] 
+1

Это не удастся, если у вас есть по-разному отформатированные поплавки (например, 5.2456e10). Лучше использовать встроенный парсер Python для оценки выражений Python в строках, как это предлагается в комментариях. – CodeMonkey

+0

Никакой специальный формат не упоминался, но спасибо за предложение. – Ohumeronen

+0

Теперь он также работает со значениями, такими как 5.2456e10 ... – Ohumeronen

1

Переход от ответа на Parse a tuple from a string?

from ast import literal_eval as make_tuple 
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)'] 

tuples = [make_tuple(stringtuple) for stringtuple in temp] 

и у вас есть множество кортежей двойников.

Я восстановил сообщение и дал ему полный ответ, потому что, видимо, было недостаточно ясно, чтобы ссылаться на другой пост.

+0

Если на это уже было дан ответ, разместите его как комментарий, а не ответ. Например. Возможный дубликат http://stackoverflow.com/questions/9763116/parse-a-tuple-from-a-string –

+1

@ user3387223: Спасибо, что поделились этим. – Ohumeronen

Смежные вопросы