Operacje na plikach tekstowych

0

Cześć. Na potrzeby zadania stworzyłem listę współrzędnych, która wygląda tak:
14.0;23.0
41.0;52.0
31.0;65.0
32.0;41.0
76.0;56.0
31.0;54.0
134.0;687.0
Mam problem z 2 i 4 punktem polecenia, czyli z rozdzieleniem danych i stworzeniem dodatkowej kolumny, w której podane będą odległości wyliczone na podstawie współrzędnych). Kompletnie nie wiem od czego zacząć. Z góry dziękuję za pomoc.
screenshot-20221214231531.png

3

Twoja lista współrzędnych powinna zawierać pary punktów.
Ten plik txt mógłby wyglądać tak:

14.0;23.0;41.0;52.0
31.0;65.0;32.0;41.0

Albo tak:

(14.0,23.0);(41.0,52.0)
(31.0,65.0);(32.0,41.0)

Jeśli formatu nie masz podanego w treści zadania, to łatwiej Ci będzie wczytać pierwszy wariant.
Zakładając, że zmienna linia zawiera wczytaną linię z pliku, tak będzie wyglądać rozdzielenie danych:

x1, y1, x2, y2 = [float(f) for f in linia.split(";")]

Gdy policzysz odległość między punktami to doklejasz ją do linia.

linia += ";" + str(odleglosc)

Taką linię możesz od razu dopisać do pliku wynikowego.

plik_wynikowy.write(linia + "\n")
50

Tak jak up (popraw dane). Potem możesz to spiąć w coś podobnego (tam gdzie jest x*y możesz wkleić output z funkcji, która Ci to np wyliczy :) )

with open("dupa.txt", "r") as read_file, open("dupa2.txt", "a") as write_file:
    for line in read_file.readlines():
        x, y = (float(x) for x in line.strip().split(";")) # Tutaj sobie wypakujesz x1,y1,x2,y2
        write_file.write(f"{x};{y};{x*y}\n") # content po drugim ; to obliczona odległość (oczywiście w tym przypadku błędnie :D)
0

Wyjaśniłby mi jeszcze ktoś, co powoduje błąd: '_io.TextIOWrapper' object has no attribute 'split' ?

with open("dane.txt", "a+") as plik:
  plik.read()
  plik.split(";")
  plik.close()
46
mx_filip napisał(a):

Wyjaśniłby mi jeszcze ktoś, co powoduje błąd: '_io.TextIOWrapper' object has no attribute 'split' ?

with open("dane.txt", "a+") as plik:
  plik.read()
  plik.split(";")
  plik.close()

Bo split to metoda zarezerwowana dla stringów a nie obiektów typu TextIOWrapper

0
ledi12 napisał(a):
mx_filip napisał(a):

Wyjaśniłby mi jeszcze ktoś, co powoduje błąd: '_io.TextIOWrapper' object has no attribute 'split' ?

with open("dane.txt", "a+") as plik:
  plik.read()
  plik.split(";")
  plik.close()

Bo split to metoda zarezerwowana dla stringów a nie obiektów typu TextIOWrapper

W jaki sposób mógłbym wczytać plik .txt tak, żeby był traktowany jaki string? Sory za tak banalne pytania, ale na zajęciach było omówione jedynie co to strip, split i replace, więc nie za bardzo potrafię to ogarnąć.

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