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.
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")
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)
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()
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
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 typuTextIOWrapper
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ąć.