Форум сайта python.su
Доброе время суток!
Задача следующая :
Есть файл в формате Excel с данными. Данные - десятичные дроби типа 0.2159663 .
Необходимо по этим данным построить график.
С постройкой графа я разобрался. Файл в Excel я экспортирую в текстовый файл. Проблема в том, что формат текстового файла строгий, т.к. В коде я слайсами указываю расположение необходимых данных для построения графика.
Вопрос такой : можно ли уйти от этого строгого формата файла? Каким образом можно из текстового файла (данные в нем разделены табуляцией) брать десятичные дроби?
Заранее благодарю за помощь.
Офлайн
В консоли при вызове программы можно указывать файл откуда будут считываться данные в функцию input().
Пример вызова программы: python3 programm.py < file.txt
В коде создаешь какую нибудь коллекцию, которая тебе больше нравится и заполняешь ее данными из файла.
Если данные из файла разделены в одной строке, то можно сделать, к примеру, список из строк.
line = str(input()) spis = line.split("символ")
place = 0 xsp = [] for line in open(filename): if line in "\t": x = line[place:len(line)] x = float(x) place += len(line) xsp += x
Отредактировано Vlad_Ki (Март 17, 2016 19:58:30)
Офлайн
А почему бы не брать данные напрямую из экселевского файла?
Офлайн
FirikПодскажите, каким образом?
А почему бы не брать данные напрямую из экселевского файла?
Офлайн
etopietoПопробуй способы, которые я описал с файлом Exel
Подскажите, каким образом?
Офлайн
etopieto
import csv
Офлайн
На данном этапе, пока еще без правок, имею код:
import matplotlib.pyplot as plt
from os.path import exists
# Значения по оси X
X =
print(“Введите имя файла и путь к нему (например, c:\\folder\\filename.txt):”)
filename_new = input(“=> ”) # Вводим имя файла
# Цикл проверки имени файла
while exists(filename_new) != True:
print(“Файл с именем %r не существует.” % filename_new, ‘\n’)
print(“Введите имя файла:”, ‘\n’)
filename_new = input(“=> ”)
txt_new = open(filename_new) # Открываем файл, имя которого ввели вручную
print(“Данные из файла: %r” % filename_new)
stroka = txt_new.read()
print(stroka)
#print(txt_new.read(), ‘\n’) # Выводим на экран данные
txt_new.close()
stroka.split()
stroka_decimal = float(stroka), float(stroka), float(stroka), float(stroka), float(stroka), float(stroka), float(stroka), float(stroka), float(stroka), float(stroka), float(stroka), float(stroka)
print(“\n”, stroka_decimal,'\n')
print(“Значения Y_1:”)
Y_1 = stroka_decimal, stroka_decimal, stroka_decimal, stroka_decimal
print(Y_1, ‘\n’)
print(“Значения Y_2:”)
Y_2 = stroka_decimal, stroka_decimal, stroka_decimal, stroka_decimal
print(Y_2, ‘\n’)
print(“Значения Y_3:”)
Y_3 = stroka_decimal, stroka_decimal, stroka_decimal, stroka_decimal
print(Y_3)
# Задаем исходные данные для каждой линии диаграммы, внешний вид линий и маркеров.
line_1, line_2, line_3 = plt.plot(X, Y_1, ‘bD:’, X, Y_2, ‘r^:’, X, Y_3, ‘go:’)
# Задаем интервалы значений по осям X и Y
plt.axis()
# Задаем заголовок диаграммы
plt.title(u'Some relationship')
# Задаем подписи к осям X и Y
plt.xlabel(u'Axis X')
plt.ylabel(u'Axis Y')
# Включаем сетку
plt.grid()
# Сохраняем построенную диаграмму в файл
# Задаем имя файла и его тип
print(“Введите имя файла для сохранения графического изображения (без расширения \”.png\“):”)
filename_save = input(“=> ”) # Вводим имя файла
plt.savefig('d:\\test\\{}.{}'.format(filename_save, ‘png’))
Попробую сделать с учетом рекомендаций и отпишусь.
Офлайн
Редактируй пожалуйста свой код в теге для пайтон. А то глаза сломать можно.)
По тому, как извлекаются данные из файла, можно судить, что в файле только одна строка, которая тебе нужна, тк нет цикла, обрабатывающего остальные.
Из того что могу подсказать -
Метод:
stroka.split()
("\t")
stroka_decimal = float(stroka), float(stroka), float(stroka), float(stroka), float(stroka), float(stroka), float(stroka), float(stroka), float(stroka), float(stroka), float(stroka), float(stroka)
stroka
Отредактировано Vlad_Ki (Март 18, 2016 11:41:43)
Офлайн
Совсем забыл: если у тебя в файле и правда только одна строка, то тебе, скорее всего, придется написать обработку исключения EOFError. Тоже самое надо сделать, если ты будешь писать цикл для обхода всех строк в файле.
Отредактировано Vlad_Ki (Март 18, 2016 12:04:33)
Офлайн
etopietoЭто вообще непонятно. Надо было привести фрагмент файла.
можно ли уйти от этого строгого формата файла?
etopietoСнимаю шляпу перед вашим упорством. Обычно график делается как-то так:
Каким образом … брать десятичные дроби?
import matplotlib.pyplot as plt import numpy as np Y=np.loadtxt("a.txt") X=Y[:,0] plt.plot(X,Y[:,1] , 'bD:', X, Y[:,2], 'r^:', X, Y[:,3], 'go:');plt.show()
Отредактировано doza_and (Март 18, 2016 21:15:25)
Офлайн