Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 4, 2018 00:44:52

dissa.88
Зарегистрирован: 2018-04-04
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Считать данные из файла.

Доброго времени суток. Помогите пожалуйста. Я обычный инженер и пытаюсь оптимизировать время работы. Чайник в питон. Задача такая. Есть данные в файле в двух столбиках. в одном номер замера, а в другом замер.
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. Что с ним делать дальше не понимаю.

Спасибо

Офлайн

#2 Апрель 4, 2018 02:32:29

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10003
Репутация: +  857  -
Профиль   Отправить e-mail  

Считать данные из файла.

  
>>> 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)

Офлайн

#3 Апрель 4, 2018 06:19:54

vic57
Зарегистрирован: 2015-07-07
Сообщения: 913
Репутация: +  127  -
Профиль  

Считать данные из файла.

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']]
>>> 
наверно так?

Офлайн

#4 Апрель 4, 2018 08:02:40

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Считать данные из файла.

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)

Офлайн

#5 Апрель 4, 2018 09:00:00

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10003
Репутация: +  857  -
Профиль   Отправить e-mail  

Считать данные из файла.

doza_and
формально то требования не удовлетворены
Я просто перевёл данные из файла (текст) в оперативную память (числа). А дальше с ними можно проводить любые действия. То есть как бы неясно, а нужны ли ей списки именно, даже если ей так кажется. А вот пары пригодятся в любом случае.



Офлайн

#6 Апрель 4, 2018 10:46:10

vic57
Зарегистрирован: 2015-07-07
Сообщения: 913
Репутация: +  127  -
Профиль  

Считать данные из файла.

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

Офлайн

#7 Апрель 4, 2018 13:53:24

dissa.88
Зарегистрирован: 2018-04-04
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Считать данные из файла.

Ооооо супер. Спасибо огромное.
Сложила все советы в кучку.

>>> 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]. Правильно?

Офлайн

#8 Апрель 4, 2018 14:13:20

dissa.88
Зарегистрирован: 2018-04-04
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Считать данные из файла.

Все работает супер.
Еще раз спасибо огромное.

Офлайн

#9 Апрель 4, 2018 15:10:07

vic57
Зарегистрирован: 2015-07-07
Сообщения: 913
Репутация: +  127  -
Профиль  

Считать данные из файла.

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()

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version