Python чтение файла, добавление числа с плавающей запятой, но пропущенных чисел - PullRequest
0 голосов
/ 16 мая 2018

У меня есть вопрос относительно извлечения данных из файла .txt в python.

Мой файл data.txt выглядит следующим образом

data 2018/05/37
time 5:5:55
1.234 5.241 6.284 .....

В нем есть несколько строк, за которыми следуют 44388 чисел с плавающей точкой.

Я использую строки ниже, чтобы извлечь его:

mylist=[]
with open('folderpath' + 'filenameA.txt') as f:
    mylist.append(re.findall('\d*?\.\d+', f.read()))
f.close

однако вместо того, чтобы получать 44388 чисел с плавающей точкой в ​​mylist, я получаю 44383 числа с плавающей точкой при чтении файла A, 44378 с плавающей точкой при чтении файла B и 44388 с плавающей точкой при чтении файла C.единственное отличие - последняя буква в имени файла, а числа - это числа с плавающей точкой, полученные из результатов моих лабораторных испытаний.

Я не знаю, возникает ли проблема в регулярном выражении или где-либо еще.

Может ли кто-нибудь помочь мне с этим?большое спасибо!

1 Ответ

0 голосов
/ 16 мая 2018

Что не так с вашим примером кода:

  • Параметры вашей команды open() не работают, как указано.
  • Ваш f.close
    • не имеет ()
    • полностью устарел из-за заявления with open(...)
  • re.findall () возвращает список, нет необходимости добавлять его, просто установите mylist = re.findall(...).

Ваше регулярное выражение не будет соответствовать значениям целых чисел без ., см. regex101 - поэтому для

1.234 135.241 6.284 .372   2   3.2

вы соответствуете только

1.234 135.241 6.284 .372        3.2

Если ваши файлы всегда начинаются с 2 строк, которые вы хотите отбросить, и за ними следуют числа с плавающей запятой, вы можете сделать:

import re
data = """data 2018/05/37 
time 5:5:55 
1.234 5.241 6.284
11.234 15.241 16.284
21.234 25.241 26.284
31.234 35.241 36.284
1 2 3
"""

fn = "data.txt"
with open(fn,"w") as f:
    f.write(data)

with open(fn,"r") as f:
    dateData = f.readline()
    timeData = f.readline()
    mylist = re.findall('((?:\d*?\.\d+)|(?:\d+?))', f.read()) # also works for ints
    # mylist = [x for x in f.read().replace("\n"," ").split(" ") if x]

print(mylist)

Если у вас все еще есть разные числа, и у каждого числа с плавающей запятой естьна самом деле . в нем, используйте текстовый редактор, чтобы подсчитать количество . в вашем файле.Скорее всего, у A, B и C просто различное количество результатов испытаний.

...