Как сделать оператор if, используя данные из записанного файла - PullRequest
0 голосов
/ 20 октября 2019

В настоящее время я пытаюсь использовать оператор if, который проверяет значения оценок, заданные в файле, который ранее считывался как номинальное значение. В настоящее время я не уверен, как данные должны быть прочитаны как конкретные целые числа, так как эти значения были ранее преобразованы в строковые значения в более ранней части назначения. С чего бы я хотел начать сначала?

В настоящее время мне удалось заставить программу читать файлы .txt, изначально созданные в начальной части, однако в настоящее время я не уверен, как обращаться с этой исходной программой в отношениипреобразование окончательных числовых значений обратно в нормальное состояние, и я не уверен, как правильно настроить его для проверки конечного фрагмента данных каждой конкретной записи.

Это данные, из которых программа извлекает:

Andrew,Marks,11.2,72.0
Betty,Franks,12.8,89.0
Connie,William,14.6,92.0
Donny,Ventura,9.9,78.0
Ernie,Turner,10.1,81.0
Fred,Smythe,8.1,75.0
Greg,Tucker,7.2,72.0
Henry,Zebulon,8.3,83.0
Ian,Fleming,4.2,72.0
Jan,Holden,7.7,84.0
Kit,Possum,7.9,79.0
Landy,Bern,10.3,93.0
Mona,Docker,11.3,98.0
Kevin,Niles,7.1,80.0
Pam,Stiles,10.9,87.0
Russ,Hunt,5.6,73.0

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

infile = open('golf.txt', 'r')
golf = infile.readlines()

for elements in golf:
    int(golf[elements[3]])
    if golf[elements[3]] > 80:
        print(elements, 'Score: Over Par')
    elif golf[elements[3]] == 80:
        print(elements, 'Score: At Par')
    elif golf[elements[3]] < 80:
        print(elements, 'Score: Under Par')

infile.close()

Я ожидал, что она напечатает отдельные списки, наряду с сообщением, что оценка была «выше номинальной». "," по номиналу "или" По номиналу "в зависимости от того, какое окончательное значение в каждом списке во внешнем списке, однако вместо этого я получаю эту ошибку:

Traceback (most recent call last):
  File "C:/Users/joelc/PycharmProjects/Project2/File/JoelLab5Pt2.py", line 7, in <module>
    int(golf[elements[3]])
TypeError: list indices must be integers or slices, not str

Ответы [ 3 ]

1 голос
/ 20 октября 2019

Вам нужно разделить каждую строку, чтобы получить значения, разделенные запятыми.

with open('golf.txt', 'r') as infile:
    for line in infile.readlines():
        values = line.split(',')
        score = float(values[3])
        if score > 80:
            print(line, 'Score: Over Par')
        ...

Использование оператора with гарантирует, что файл будет закрыт. В противном случае рекомендуется использовать обработку исключений для открытия и закрытия файлов. with позаботится о том, чтобы закрыть файл для вас, как только управление выйдет из блока with.

0 голосов
/ 20 октября 2019

Рассмотрите возможность использования pandas:

  • Как только данные окажутся в кадре данных, легко вычислите другие метрики или нанесите на график данные
  • С учетом показанных данныхв .csv и без заголовков
  • Используйте np.select, чтобы создать новый столбец для пар
  • Я не знаю, что должен 3-й столбецбыть, поэтому я просто оставил его как индекс 2.
import pandas as pd
import numpy as np

# create the dataframe
df = pd.read_csv('test.csv', header=None, names=['first_name', 'last_name', 2, 'score'])

first_name last_name     2  score
    Andrew     Marks  11.2   72.0
     Betty    Franks  12.8   89.0
    Connie   William  14.6   92.0
     Donny   Ventura   9.9   78.0

# make a par column
criteria = [df['score'] < 80, df['score'] == 80, df['score'] > 80]
values = ['Under Par', 'At Par', 'Over Par']

df['par'] = np.select(criteria, values)

first_name last_name     2  score        par
    Andrew     Marks  11.2   72.0  Under Par
     Betty    Franks  12.8   89.0   Over Par
    Connie   William  14.6   92.0   Over Par
     Donny   Ventura   9.9   78.0  Under Par

# save it
df.to_csv('my_file.csv', index=False)
0 голосов
/ 20 октября 2019

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

infile = open('golf.txt', 'r')
for line in infile:
    elements = line.split(‘,’)
    e = float(elements[3])
    if e > 80:
        # etc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...