LINUX.ORG.RU

Нужна помощь в написании скрипта на python


0

1

Здравствуй, уважаемое сообщество.
Имеется такого вида массив данных (привожу в пример только кусок, т.к. на самом деле значений уйма)

24940 1.819E+0000

24920 1.806E+0000

24900 1.794E+0000

24880 1.778E+0000

24860 1.763E+0000

Эти значение записаны в обычном файле с расширением .txt. Задача в том, чтобы построить графики из таких вот значений (ось Х первый столбец, ось Y - второй), но до этого все значения в первом столбце мне нужно возвести в степень -1 (т.е. единицу разделить на каждое значение), а второй столбец привести к нормальному виду, поправить везде запятые, т.е. если записано 1.774Е-0002 это означает что нужно сместить запятую на два знака назад, а если 1.774E+0003 - на 3 знака вперед.

Таких значений очень много, вручную это всё сделать просто нереально и я думал с помощью языка Python (который я недавно начал изучать) создать скрипт который хотя бы выдаст мне первую и вторую колонки по отдельности, ну а дальше уже и провести с ними эти операции. Пока что не очень получается ...

Буду очень признателен за любую помощь, подсказку или даже просто внимание к моей проблеме.


Ну для начало тебе надо вытащить значения из файла:

file = open("data.txt", 'r')
for i in file.readlines():
    arrayPoints = i.split()

arrayPoints это список х['24940', '1.819E+0000'], т.е. x = arrayPoints[0], а y соответственно arrayPoints[1], но он так делает только в текущей строке, т.е. берет строку 24940 1.819E+0000 и делает из нее список

snakeduse
()
Ответ на: комментарий от snakeduse

Спасибо за ответ!

Получилось отделить таким образом, но у меня таких строк 600 для каждого графика. Как быть ? :(

Я пробовал присвоить переменной все эти строки, а потом вытащить значений с помощью str, но в ответ получил: 'type' object is not subscriptable.

s = '''12860    4.456E-0002

12840    4.442E-0002

12820    4.446E-0002'''
str[0:4]

Mendax
() автор топика

А не проще взять R, который для подобного заточен? Там и экспоненциальный вид сам прочитается, и степени от стоблцов считать удобно.

userid2
()
Ответ на: комментарий от userid2

Думаю разбиратся долго надо будет, а времени совсем нету (как обычно всё в последнюю ночь), мне выше вообще в одну строчку написали, если это сработает я буду самый счастливый студент в мире :)

Mendax
() автор топика
Ответ на: комментарий от Mendax

Подробнее: поставьте пакет gnuplot (оф.сайт http://www.gnuplot.info/) и прочтите его встроенную документацию. Встроенный язык может показаться в чём-то сложным или нелогичным, но вполне осваивается.

Приблизительный вид gnuplot-скрипта:

set terminal png font "Terminus,12" # выводим в формат png со шрифтом Terminus размера 12
set out "/куда/класть/картинку.png" # очевидно
plot "/путь/к/файлу/данных.txt" using (1/$1):($2) title "заголовок" # подробнее help plot

Помимо png-файла результат можно выводить на экран (set term wxt, значение по умолчанию) и сохранять в другие форматы.

Документация: http://www.gnuplot.info/docs_4.4/gnuplot.pdf

AITap ★★★★★
()
Ответ на: комментарий от AITap

Спасибо Вам огромное ! Сейчас буду пробовать.

Mendax
() автор топика
Ответ на: комментарий от AITap

Еще раз спасибо большое за помощь, всё получилось сделать за считанные мгновенья.

Mendax
() автор топика
Ответ на: комментарий от chinarulezzz

А что, господа советчики, вы забыли, что файловый объект сам по себе можно использовать как итератор?

map(lambda x: x.split(), open("ex.txt"))

И почему нет версии с with?

Virtuos86 ★★★★★
()
Ответ на: комментарий от Virtuos86

Упс, да :)

И почему нет версии с with?


можно но объёмней. Хотя возможно ошибаюсь)

chinarulezzz ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.