Python преобразование текстовых данных из файла данных в int - PullRequest
0 голосов
/ 22 марта 2019

Я пытаюсь написать простую сюжетную программу для своей компании.У меня есть файл .dat с данными, и для его чтения я делаю:

with open(r'XXX\DAT-010.DAT', 'r') as f:
    data = f.readlines()
print(data)

Результат:

 ['      Date      Time    Elapsed    Sensor1    Sensor2    Sensor3    Sensor4    Sensor5    Sensor6    Sensor7    Sensor8    Sensor9   Sensor10   Sensor11   Sensor12   Sensor13   Sensor14   Sensor15   Sensor16   Sensor17   Sensor18   Sensor19   Sensor20\n',
 'dd/mm/yyyy  hh:mm:ss    Seconds JGP1103-I2 JGP1102-I2 JGP1102-I1    JGP1001    JGP1101   FLOW_416   FLOW_333  FLOW_2945     L1_INJ     L2_INJ     L3_INJ     L4_INJ     L1_EXT     L2_EXT     L3_EXT     L4_EXT L1_Mth_ext L2_Mth_ext L3_Mth_ext L4_Mth_ext\n',
 '         -         -          -        kPa        kPa        kPa        kPa        kPa     ml/min     ml/min     ml/min         mV         mV         mV         mV         mV         mV         mV         mV         mV         mV         mV         mV\n',
 '         -         -          -          -          -          -          -          -          -          -          -          -          -          -          -          -          -          -          -          -          -          -          -\n',
 '----------  --------  --------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------\n',
 '26.10.2016  08:58:09    1211242      84.95      84.77      86.21      84.47      84.77    -104.78     -83.82          -          -          -          -          -          -          -          -          -          -          -          -          -\n',
 '26.10.2016  08:58:24    1211257      85.01      84.77      86.03      84.53      84.77    -104.78     -83.82          -          -          -          -          -          -          -          -          -          -          -          -          -\n']

Теперь, чтобы найти действительные значения, я делаю:

data_int = list(map(float, data))

и я получаю следующую ошибку:

ValueError: could not convert string to float: '      Date      Time    Elapsed    Sensor1    Sensor2    Sensor3    Sensor4    Sensor5    Sensor6    Sensor7    Sensor8    Sensor9   Sensor10   Sensor11   Sensor12   Sensor13   Sensor14   Sensor15   Sensor16   Sensor17   Sensor18   Sensor19   Sensor20\n'

Итак, я сделал:

data_int = list(map(float, data[6]))

Чтобы попробовать его в строке, которая должна содержать только фактические значения данных,и я получил:

ValueError: could not convert string to float: '.'

Теперь, как я могу эффективно преобразовать эти данные в анализируемый список значений?Как я могу преобразовать данные TXT в целые числа?Для записи я попробовал int (data) и т. Д., И это не сработало.

1 Ответ

1 голос
/ 22 марта 2019

Каждая строка ваших файлов является строкой, поэтому row[5] содержит:

"26.10.2016 08:58:09 1211242 84.95 84.77 86.21 84.47 84.77 -104.78 -83.82 - - - - - - - - - - - - -\n" 

Вы не можете преобразовать это в число с плавающей точкой. Вам нужно

  • разбить линию на части
  • преобразовать деталь в соответствии с типом данных

line = "26.10.2016 08:58:09 1211242 84.95 84.77 86.21 84.47 84.77 -104.78 -83.82 - - - - - - - - - - - - -\n"

def tryFloat(text):
    """Returns either the float(text) or text itself."""
    try:
        return float(text)
    except:
        return text

    # strip() removes \n and other witespaces front and end
    # split splits at whitespaces combining multiple into one
data  = list(map(tryFloat,line.strip().split()))

print(data)

Вывод (список значений):

['26.10.2016', '08:58:09', 1211242.0, 84.95, 84.77, 86.21, 84.47, 84.77, -104.78, 
 -83.82, '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '-']

Затем вы можете выбрать детали из этого списка:

print(data[3])  # 84.95
...