Python - poprawna lista odczytywana z pliku

Odpowiedz Nowy wątek
2020-03-22 21:20

Rejestracja: 2 tygodnie temu

Ostatnio: 4 dni temu

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.

Pozostało 580 znaków

2020-03-22 21:47

Rejestracja: 1 miesiąc temu

Ostatnio: 1 dzień temu

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

Pozostało 580 znaków

2020-03-22 22:14

Rejestracja: 2 tygodnie temu

Ostatnio: 4 dni temu

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())))
edytowany 1x, ostatnio: woehh, 2020-03-22 22:14

Pozostało 580 znaków

2020-03-22 22:44

Rejestracja: 1 miesiąc temu

Ostatnio: 1 dzień temu

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.

Pozostało 580 znaków

2020-03-22 22:58

Rejestracja: 2 tygodnie temu

Ostatnio: 4 dni temu

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()
edytowany 1x, ostatnio: woehh, 2020-03-22 22:58

Pozostało 580 znaków

2020-03-22 23:10

Rejestracja: 1 miesiąc temu

Ostatnio: 1 dzień temu

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.

Pozostało 580 znaków

2020-03-22 23:22

Rejestracja: 2 tygodnie temu

Ostatnio: 4 dni temu

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.

edytowany 1x, ostatnio: woehh, 2020-03-22 23:23
Co chcesz uzyskać? - Riki 2020-03-22 23:29

Pozostało 580 znaków

2020-03-22 23:32

Rejestracja: 2 tygodnie temu

Ostatnio: 4 dni temu

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

edytowany 1x, ostatnio: woehh, 2020-03-22 23:33
Lista[0] - Riki 2020-03-22 23:37

Pozostało 580 znaków

2020-03-23 00:00

Rejestracja: 2 tygodnie temu

Ostatnio: 4 dni temu

0

Dzięki za pomoc. :)

Pozostało 580 znaków

2020-03-25 21:59

Rejestracja: 4 miesiące temu

Ostatnio: 1 tydzień temu

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()
edytowany 2x, ostatnio: Maciej Relidziński, 2020-03-25 22:01

Pozostało 580 znaków

Odpowiedz

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