Строка '-1' не может быть преобразована в число с плавающей точкой - PullRequest
0 голосов
/ 13 ноября 2018

Я пытаюсь прочитать большие наборы чисел из текстового файла, открытого в кодировке utf-8. Текстовый файл был копией / вставкой из PDF. Проблема заключается в отрицательных числах (-1, -2 и т. Д.): Я удалил все, поэтому отдельные биты строки выглядят так: -1, -2 и т. Д.

Затем я хочу рассчитать с ними и преобразовать их с float(), но я получаю ошибку:

can't convert string to float: '-1'

Я пришел к выводу, что '-' можно интерпретировать как длинный '-', как бы это ни называлось, и заменить его вручную в текстовом файле на '-'. Теперь это работает для этой единственной строки, float () преобразовал ее. Я написал небольшой скрипт, который находит и заменяет все '-' на '-' в текстовом файле, но это не сработало.

with open('text.txt', encoding='utf8') as fobj:
    all = []
    for line in fobj:
        line = line.strip()
        if '-' in line:
            line.replace('-','-')
            print('replaced')
        all.append(line)
with open('text2.txt','w',encoding='utf8') as f:
    for i in all:
        print(i)
        f.write(i)
        f.write('\n')

Почему я могу заменить '-' на '-' вручную, но не этим скриптом? Спасибо за помощь.

Пример вырезан из текстового файла:

/ 11/3 / 2 / 0 / 0/–1 /
/ 11/5 / 0 / 2 / 0/0 / N
/ 12/3 / 1 / 0 / 0/0 /
/ 12/4 / 1 / 1 / 0/0 / NS

/ 12/4 / 4 / –1 / 0/–1 / H

/ 12/5 / 1 / 0 / 0/–1 / H

/ 12/5 / 2 / 0 / 0/-1 / H

/ 11/4 / 0 / 0 / 0/0 / H

Вы действительно можете увидеть разницу между второй последней и третьей последней строкой -1. В этой копии это. я заменил последний - вручную.

Ответы [ 3 ]

0 голосов
/ 13 ноября 2018

Вы пропустили line назначение

if '-' in line:
    line = line.replace('-','-')
    print('replaced') 
0 голосов
/ 13 ноября 2018

используйте оба ответа, ваш код должен быть:

with open('text.txt', encoding='utf8') as fobj:
        all_ = []
        for line in fobj:
            line = line.strip()
            if <b>u'\u2013'</b> in line:
                <b>line =</b> line.replace(<b>u'\u2013'</b>, '-')
                print('replaced', line)
            all_.append(line)
    with open('text2.txt','w',encoding='utf8') as f:
        for i in all_:
            print(i)
            f.write(i)
            f.write('\n')

результат равен

replaced / 11/3 / 2 / 0 / 0/-1 /
replaced / 12/4 / 4 / -1 / 0/-1 / H
replaced / 12/5 / 1 / 0 / 0/-1 / H
/ 11/3 / 2 / 0 / 0/-1 /
/ 11/5 / 0 / 2 / 0/0 / N
/ 12/3 / 1 / 0 / 0/0 /
/ 12/4 / 1 / 1 / 0/0 / NS

/ 12/4 / 4 / -1 / 0/-1 / H

/ 12/5 / 1 / 0 / 0/-1 / H

/ 12/5 / 2 / 0 / 0/-1 / H

/ 11/4 / 0 / 0 / 0/0 / H
0 голосов
/ 13 ноября 2018

Я только что посмотрел на ваш код: он делает replace('-','-') - это тот же символ.

Вы должны либо сделать replace('–','-'), либо, для лучшей ясности того, что вы делаете, replace(u'\u2013', '-').

Кроме того, ваше переназначение на line отсутствует.

...