Форум сайта python.su
Доброго времени суток. Помогите пожалуйста. Я обычный инженер и пытаюсь оптимизировать время работы. Чайник в питон. Задача такая. Есть данные в файле в двух столбиках. в одном номер замера, а в другом замер.
1 0.903
2 0.904
3 0.903
4 0.904
5 0.904
6 0.903
Надо каким-то образом считать их в два списка. Подскажите как это сделать.
Делала вот так.
f = open(“1.txt”, “rt”)
s = (f.read())
a = s.split('\n')
f.close
print(a)
Но получается один список с каким-то \t. Что с ним делать дальше не понимаю.
Спасибо
Офлайн
>>> import io >>> >>> text = """\ ... 1 0.903 ... 2 0.904 ... 3 0.903 ... 4 0.904 ... 5 0.904 ... 6 0.903 ... """ >>> >>> stream = io.StringIO(text) >>> lst = list(map(str.split, stream)) >>> lst [['1', '0.903'], ['2', '0.904'], ['3', '0.903'], ['4', '0.904'], ['5', '0.904'], ['6', '0.903']] >>>
with open('file.txt', encoding='utf-8') as fin: lst = list(map(str.split, fin))
>>> lst = [['1', '0.903'], ['2', '0.904'], ['3', '0.903'], ['4', '0.904'], ['5', '0.904'], ['6', '0.903']] >>> >>> out = [(int(i), float(j)) for i, j in lst] >>> out [(1, 0.903), (2, 0.904), (3, 0.903), (4, 0.904), (5, 0.904), (6, 0.903)] >>>
Отредактировано py.user.next (Апрель 4, 2018 02:36:13)
Офлайн
dissa.88\t - знак табуляции
Но получается один список с каким-то \t
>>> doc = '''1\t0.903 2\t0.904 3\t0.903 4\t0.904 5\t0.904 6\t0.903''' >>> lst = [i.split('\t') for i in doc.split('\n')] >>> lst [['1', '0.903'], ['2', '0.904'], ['3', '0.903'], ['4', '0.904'], ['5', '0.904'], ['6', '0.903']] >>>
Офлайн
dissa.88
Надо каким-то образом считать их в два списка.
py.user.next
>>> out
[(1, 0.903), (2, 0.904),
vic57>>> lst [['1', '0.903'], ['2', '0.904'],
li0=[] li1=[] for i in open("x.dat"): x,y = i.split() li0.append(x) li1.append(y)
import numpy as np data = np.loadtxt("x.dat")
Отредактировано doza_and (Апрель 4, 2018 08:03:55)
Офлайн
doza_andЯ просто перевёл данные из файла (текст) в оперативную память (числа). А дальше с ними можно проводить любые действия. То есть как бы неясно, а нужны ли ей списки именно, даже если ей так кажется. А вот пары пригодятся в любом случае.
формально то требования не удовлетворены
Офлайн
doza_andне знаю что хочет делать ТСформально то требования не удовлетворены
>>> doc = '''1\t0.903 2\t0.904 3\t0.903 4\t0.904 5\t0.904 6\t0.903''' >>> lst = [] >>> for i in doc.split('\n'): lst.append(i.split('\t')) >>> lst [['1', '0.903'], ['2', '0.904'], ['3', '0.903'], ['4', '0.904'], ['5', '0.904'], ['6', '0.903']] >>> [float(i[1]) for i in lst] [0.903, 0.904, 0.903, 0.904, 0.904, 0.903] >>> [int(i[0]) for i in lst] [1, 2, 3, 4, 5, 6] >>>
Офлайн
Ооооо супер. Спасибо огромное.
Сложила все советы в кучку.
>>> with open('1.txt', encoding = ‘utf-8’) as fin:
>>> lst = list(map(str.split, fin))
>>> y = [float(i) for i in lst]
>>> x = [int(i) for i in lst]
>>> print(x)
>>> print(y)
Получилось вот так
Я просто хочу потом график нарисовать. И далее использовать эту программку для разных данных. Это просто значительно поможет ускорить процесс обработки измерений.
!!!! Вопрос: а если первый столбик “x” будет не int, а например другой набор данных (к примеру, 249,66, 249,77 и т.д.) я так понимаю надо просто в строчке "x = [int(i) for i in lst]" заменить int на float
x = [float(i) for i in lst]. Правильно?
Офлайн
Все работает супер.
Еще раз спасибо огромное.
Офлайн
dissa.88для примера
Я просто хочу потом график нарисоват
from matplotlib import pyplot as plt doc = '''1\t0.903 2\t0.904 3\t0.903 4\t0.904 5\t0.904 6\t0.903''' l = [i.split('\t') for i in doc.split('\n')] x = [int(i[0]) for i in l] y = [float(i[1]) for i in l] plt.plot(x,y) plt.show()
Офлайн