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

Спасибо
py.user.next
  
>>> 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)]
>>>
vic57
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']]
>>> 
наверно так?

doza_and
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")
py.user.next
doza_and
формально то требования не удовлетворены
Я просто перевёл данные из файла (текст) в оперативную память (числа). А дальше с ними можно проводить любые действия. То есть как бы неясно, а нужны ли ей списки именно, даже если ей так кажется. А вот пары пригодятся в любом случае.
vic57
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]
>>> 
dissa.88
Ооооо супер. Спасибо огромное.
Сложила все советы в кучку.

>>> 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
Все работает супер.
Еще раз спасибо огромное.
vic57
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()
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB