Python 3: как правильно добавить число из строки, содержащей числа и строки?

Прямо сейчас я работаю с несколькими строками, которые следуют формату текста даты и времени [долгота, широта], и я не уверен, как вытащить только широту и только долготу.

Что я пытался сделать, так это разбить весь файл на строки (эта часть работала нормально), затем разбить строки на слова (что сработало), но теперь я не могу вытащить долготу как число с плавающей запятой, поскольку я получаю Traceback ValueError, где он говорит, что не может преобразовать строку в число с плавающей запятой.

Сначала я подумал, что проблема в том, что строка слов (в данном случае WordZ) выглядела примерно как "['45.696179999999998,', '-122.51231420000001]', '3', '2011-09-01', '17:06:53',[...]", и поэтому по логике попытка вытянуть длину как число с плавающей запятой, сделав long = float(WordZ[0]), была невозможна, потому что WordZ заканчивался запятой.

Итак, я попытался сделать #long = float(WordZ[0].rstrip(",")). Но я все еще получаю то же самое, не могу преобразовать строку в ошибку с плавающей запятой.

И что еще хуже, я понятия не имею, почему это происходит, потому что запятая наверняка удаляется в соответствии с полем вывода:

Traceback (most recent call last):
 File "C:/Users/claym/Desktop/Assignment3/assign3.py", line 28, in <module>
         long = float(WordZ[0].rstrip(","))
.ValueError: could not convert string to float:     
    41.29866963

Process finished with exit code 1

Что мне нужно сделать, чтобы решить эту проблему?


person Linus    schedule 17.03.2018    source источник
comment
Из того, что я могу сделать из предоставленного вами небольшого кода, вы работаете с массивом или многомерным массивом. Если у вас есть запись, заключенная в одинарные или двойные кавычки, она будет интерпретирована как строка. Можете ли вы удалить одинарные или двойные кавычки? Таким образом, это будет читаться как EX: 1, 2, 3,5 вместо «1», «2», «3,5». Надеюсь, это поможет.   -  person jameswassinger    schedule 17.03.2018
comment
Итак, у вас есть текстовый файл со строками следующего формата: [latitude, longitude] ,date, time, text и вы хотите получить широту/долготу для каждой строки?   -  person Artemis    schedule 17.03.2018
comment
Подождите, я только что понял, что это не сработало, когда я попытался преобразовать его в число с плавающей запятой. @ArtemisFowl да, так выглядит текстовый файл. Я в значительной степени должен оценивать каждую линию и назначать баллы. У меня есть приблизительное представление о том, как я буду выполнять часть назначения точек, но я понятия не имею, как получить широту как число с плавающей запятой, так как я продолжаю получать ValueErrors, которые говорят, что я не могу преобразовать строку в числа с плавающей запятой, даже если поле вывода выглядит так: 39.811711539999997 41.683533250000004 45.696179999999998 19.372430619999999 45.498773239999998   -  person Linus    schedule 17.03.2018


Ответы (2)


в зависимости от того, как именно был отформатирован ваш текстовый файл, это может работать:

file=open("info.txt", "r")
linestxt=file.read().split("\n")
lines=[]
for i in linestxt:
    j=i.split("]")
    i=j[0]+"]"
    exec("line=["+i+"]")
    lines.append(line)
lats=[]
longs=[]
for i in line:
    lats.append(i[0][0])
    longs.append(i[0][1])

так что на самом деле [lat, long] должен быть допустимым синтаксисом (lat и long оба должны быть типа int, str или float (или любого другого типа данных))

person Artemis    schedule 17.03.2018
comment
Очень небезопасно, это качественная инъекция кода. - person zdimension; 18.03.2018
comment
Это не сработало:/ Я скопирую и вставлю полученную ошибку в pastebin, чтобы форматирование не подходило: pastebin. com/n1u7FirC Я пытался исправить синтаксис, но не смог - person Linus; 18.03.2018
comment
@Linus, тебе нужны запятые между элементами в списке - person Artemis; 18.03.2018
comment
Ты имеешь в виду список, который я просматриваю? Вот что я использую: pastebin.com/6T1VkYUj К сожалению, мне приходится работать с этим как есть :/ - person Linus; 18.03.2018
comment
Думаю, я исправил это - person Artemis; 18.03.2018

person    schedule
comment
Я вижу, что вы сделали, и я сделал что-то подобное, но когда я начал реализовывать это, я обнаружил что-то, о чем я не знал (надеюсь, это причина моих проблем). Таким образом, файл разбивается на строки (я сделал line = file.split(\n), но я только что понял, что это приводит к тому, что переменная, которая обрабатывает каждую строку, обрабатывает каждую строку как отдельный элемент в массиве. Неудивительно это не работает!Но потом, когда я пошел проверить эту теорию, выполнив print(line[3]), он сказал, что индекс списка выходит за пределы допустимого диапазона, хотя в этом файле гораздо больше, чем 4 строки. - person Linus; 18.03.2018
comment
Если хотите, загрузите копию файла куда-нибудь, чтобы мы могли получить к нему доступ. - person Ignatios Chatzidiamantis; 18.03.2018
comment
pastebin.com/6T1VkYUj Это список контента, с которым я должен работать. Вывод показывает, что скобки и запятые по какой-то причине не удаляются. - person Linus; 18.03.2018
comment
У меня работало (Python 3.4) - person Ignatios Chatzidiamantis; 18.03.2018
comment
Только что попробовал еще раз, не внедрив ваш код в свой, и все заработало, значит, я где-то накосячил в реализации. Хотел бы я быть лучше в этом, лол, да ладно, пора выяснить, где я напортачил. Спасибо за вашу помощь, Игнатиос (и за то, что помогли мне еще больше изолировать проблему, которую я создал)! - person Linus; 18.03.2018
comment
СПАСИБО БОЛЬШОЕ ИГНАТИЮ!!! Я вернулся и продолжал возиться с написанным кодом, чтобы понять, почему программа не работала, хотя я реализовывал ваш код. Нашел проблему, исправил, теперь программа работает как надо! Большое вам спасибо :) Я понятия не имею, почему это было проблемой в первую очередь, но теперь я знаю, что то, что я сделал, было неправильным. Большое спасибо :) - person Linus; 18.03.2018