Python - poprawna lista odczytywana z pliku

0

Witam,

mam prosty błąd z którym nie mogę sobie poradzić, mianowicie muszę ten kawałek kodu przekształcić tak, danych nie było trzeba wpisać tylko, aby były wczytywane z pliku txt. Plik .txt dołączam w załączniku.

Lista=[]
for i in range(200):
    Lista.append(list(map(int,input().split())))

Próbowałem zrobić to tak, ale niestety nie działa prawidłowo:

Lista=[]
for i in range(200):
    Lista.append(list(map(int,open("przyklad.txt").read().split())))

Plik .txt dołączam w załączniku. Z góry dziękuję za pomoc i pozdrawiam.

2

Może takie proste podejście?:

with open('przyklad.txt') as f:     # otwórz plik
    for line in f:                  # dla każdej linii w pliku wykonuj ...
        for num in line.split():    # 1. podziel linię splitem na tablicę zawierającą numery. 2. Wykonuj dla każdego numeru ...
            Lista.append(int(num))  # 1. konertuj num na wartość liczbową. 2. Dodaj do listy
0
Riki napisał(a):

Może takie proste podejście?:

with open('przyklad.txt') as f:     # otwórz plik
    for line in f:                  # dla każdej linii w pliku wykonuj ...
        for num in line.split():    # 1. podziel linię splitem na tablicę zawierającą numery. 2. Wykonuj dla każdego numeru ...
            Lista.append(int(num))  # 1. konertuj num na wartość liczbową. 2. Dodaj do listy

Tak, ale dalej mam taki fragment kodu:

    if a < 319 and abs(Lista[b][a]-Lista[b][a+1])>128:

I wywala błąd:
if a < 319 and abs(Lista[b][a]-Lista[b][a+1])>128:
TypeError: 'int' object is not subscriptable

A przecież przy tym, wszystko działa dobrze, nie rozumiem.

Lista.append(list(map(int,input().split())))
1

Jeśli chcesz mieć tablicę tablic, gdzie pojedyncza tablica pochodzi z linii:

with open('przyklad.txt') as f:
	Lista = [[*map(int,line.split())] for line in f]

Nie popatrzyłem na Twój przykład.

0
Riki napisał(a):

Jeśli chcesz mieć tablicę tablic, gdzie pojedyncza tablica pochodzi z linii:

with open('przyklad.txt') as f:
	Lista = [[*map(int,line.split())] for line in f]

Nie popatrzyłem na Twój przykład.

Dzięki bardzo, teraz wszystko działa. Skorzystam jeszcze z okazji jak by wyglądało to jak w Twojej odpowiedzi tylko dla zwykłego (też chodzi mi o odczytanie z pliku):

d=input().split()
1

Wygląda na to, że ten kod nie jest dla Ciebie zrozumiały.
Wyciągnięcie jednej linii do jednej tablicy:

one_list = [*map(int,input().split())]

Ten one_list musisz następnie sobie dodawać do Lista w sposób jaki potrzebujesz.
Poczytaj o map jak działa i co robi.

0
Riki napisał(a):

Wygląda na to, że ten kod nie jest dla Ciebie zrozumiały.
Wyciągnięcie jednej linii do jednej tablicy:

one_list = [*map(int,input().split())]

Ten one_list musisz następnie sobie dodawać do Lista w sposób jaki potrzebujesz.
Poczytaj o map jak działa i co robi.

Poczytam na pewno, tylko w tym problem, że potrzebuje to na teraz.

with open('dane.txt') as f:
    Lista = [[*map(int, line.split())] for line in f]

Jak przekształcić ten kod po prostu tak, aby było samo line.split()?
Lub po prostu, żeby robił to samo co input().split() tylko, że dla pliku.

0

@Riki:
Z pliku przyklad.txt chce uzyskać dokładnie to:
['32', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '64', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '80', '32']

0

Dzięki za pomoc. :)

0

import numpy as np
import matplotlib.pyplot as plt
import scipy.integrate as integrate
import math
from matplotlib.animation import FuncAnimation

#plt.style.use('dark_background')

x_data = []
y_data = []
dt = 0.1		
h_zad = 4  		#[m]
h = 0      		#zerowe warunki początkowe max = 4m
h_pop = 0
Q_we = 0  		#[m^3/s]  max = 0.25
Q_wy = 0.1		#[m^3/s] 
A = 0.25 		#[m^2]	
uchyb = 0
uchyb_pop = 0
calka = 0
Kp = 5
Ki = 1.5
beta = 0.1

def model_zbiornika():
	global Q_we
	global h_pop
	global calka
	global h
	h  = (Q_we - beta * math.sqrt(h)) * (dt/A) + h_pop
	if h < 0:
		h=0
	uchyb = h_zad - h
	calka = uchyb * dt
	Q_we = Kp * uchyb + Ki * calka
	if Q_we < 0:
		Q_we = 0
	elif Q_we > 0.25:
		Q_we = 0.25
	h_pop = h
	uchyb_pop = uchyb
	return h

fig, ax = plt.subplots()
ax.set_xlim(-0.25, 0.75)
ax.set_ylim(-0.55, 4.5)
ax.grid()

line, = ax.plot([], [], 'o-', lw = 3)
line1, = ax.plot([], [], 'g', lw = 3)
line2, = ax.plot([], [], 'g', lw = 3)
line3, = ax.plot([], [], 'g', lw = 3)
time_template = 'time = %.1fs'
time_text = ax.text(0.05, 0.9, '', transform=ax.transAxes)


def init():
	line.set_data([], [])
	line1.set_data([], [])
	line2.set_data([], [])
	line3.set_data([], [])
	time_text.set_text('')

	return line, line1, line2, line3, time_text 

def animation_frame(i):

	model_zbiornika()

	x_data = [0, 0.5]
	y_data = [h, h]

	line.set_data(x_data, y_data)
	line1.set_data([0, 0.5], [0, 0])
	line2.set_data ([0, 0], [0, 4])
	line3.set_data([0.5, 0.5], [0, 4])
	time_text.set_text(time_template % (i*dt))

	return line, line1, line2, line3, time_text 

animation = FuncAnimation(fig, func=animation_frame, frames= np.arange(0, 1000, 1), blit=True, interval=dt*1000)
plt.show()

1 użytkowników online, w tym zalogowanych: 0, gości: 1