Python3.7 неправильно анализирует текстовый файл - PullRequest
0 голосов
/ 13 марта 2019

Я пытаюсь написать (должен быть ...) базовый сценарий Python для выполнения следующего:

  1. Чтение в файле журнала по жестко заданному пути (пример файла ниже)
  2. Создать массив каждой строки файла с двумя или тремя элементами
  3. Распечатать этот массив.

Вот пример файла журнала из теста производительности scimark:

**                                                              **
** SciMark2 Numeric Benchmark, see http://math.nist.gov/scimark **
** for details. (Results can be submitted to pozo@nist.gov)     **
**                                                              **
Using       2.00 seconds min time per kenel.
Composite Score:          55.11
FFT             Mflops:   35.99    (N=1024)
SOR             Mflops:   60.25    (100 x 100)
MonteCarlo:     Mflops:    3.21
Sparse matmult  Mflops:   16.10    (N=1000, nz=5000)
LU              Mflops:   15.02    (M=100, N=100)

В идеале я хотел бы создать массив следующим образом:

array = [
['Composite Score', 55.11 ''],
['FFT MFlops', 35.99, '(N=1024)'],
['SOR MFlops', 60.25, '(100 x 100)'],
['MonteCarlo Mflops', 3.21, ''],
['Sparse matmult Mflops', 16.10, '(n=1000, NZ=5000)'],
['LU', 3.21, '(M=100, N=100)']]

Я пытался сделать это со следующими кодами Python:

import csv

with open ('/SciMarkResults.txt') as file:
    lines = file.readlines()

print(len(lines))
new_lines = lines[5:]

def get_data(readfile):
    types = (line.split('\n') for line in readfile)
    return types

a = get_data(new_lines)

print(a)

Который обеспечивает следующий вывод:

11
<generator object get_data.<locals>.<genexpr> at 0x7ff45b5c5ba0>

Я рассмотрел использование регулярного выражения, но это, кажется, не является предпочтительным решением.

Я не смог определить, почему я не могуправильно разделить массив.Простая печать new_lines дает:

['Composite Score:          460.11\n', 'FFT             Mflops:   315.99    (N=1024)\n', 'SOR             Mflops:   860.25    (100 x 100)\n', 'MonteCarlo:     Mflops:    93.21\n', 'Sparse matmult  Mflops:   416.10    (N=1000, nz=5000)\n', 'LU              Mflops:   615.02    (M=100, N=100)\n']

Буду признателен за любой совет.

1 Ответ

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

Вместо использования

types = (line.split('\n') for line in readfile)

который является генератором, вы можете использовать

types = [line.split('\n') for line in readfile]

, который является списком и должен дать вам вывод, который вам нужен.

То же самое было сказано выше @ jdehesa

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...