Сортировка данных из .txt файла - PullRequest
0 голосов
/ 10 июля 2019

Я выполняю некоторые запросы на MySQL через Python.После прочтения данных я бы хотел отсортировать их по процентам.Любая помощь будет с удовольствием оценена.

Метод, который я использую для записи:

def mid_critical(controller,code):
critical = 75
mid_critical = 50

cursor = controller.cursor()
cursor.execute(code)    # execute code

with open('report.txt', 'a') as f:
    print("\n******************* Mid Critical: **************", file=f)
    for r in cursor:  #show tables one by one
        if str(type(r[5])) == "<class 'decimal.Decimal'>":
            percent = r[5] / r[2] * 100
            if percent > mid_critical and percent < critical:
                print(r[1],"\nOwner:",r[8],"\nValues:",r[5],"out of", r[2] ,"\nPercent used: %d%% \n" %(percent), file=f)

код - это выполняемый запрос.

контроллер - это учетные данные для успешного общения.

Как только запись в файл выглядит так:

POC 
Owner: ACE 
Values: 45.1 out of 81.5 
Percent used: 55% 

DESKTOP 
Owner: Nan 
Values: 231.8 out of 329.2 
Percent used: 70% 

REGRESSION 
Owner: None 
Values: 6.6 out of 10.2 
Percent used: 64% 

Ради примера, который я только показываю 3, есть еще гончие.

Вывод, который я ищу, будет

DESKTOP 
Owner: Nan 
Values: 231.8 out of 329.2 
Percent used: 70% 

REGRESSION 
Owner: None 
Values: 6.6 out of 10.2 
Percent used: 64% 

POC 
Owner: ACE 
Values: 45.1 out of 81.5 
Percent used: 55% 

Ответы [ 3 ]

1 голос
/ 10 июля 2019

BIGO.Возможно, вам стоит подумать о расчете процента внутри вашего MySQL Query и использовать ORDER BY для правильного оформления заказа.

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

Например:

SELECT * FROM 
(
   SELECT Number1,Number2,Number1/Number2 AS Percentage
   FROM Table
) subquery
ORDER BY Percentage

Затем делайте все, что вы хотите с данными

1 голос
/ 10 июля 2019

Добавление разделов в список, сортировка списка списков по последнему элементу, а затем вывод списка:

from operator import itemgetter

report = []
for r in cursor:  # show tables one by one
    if str(type(r[5])) == "<class 'decimal.Decimal'>":
        percent = r[5] / r[2] * 100
        if percent > mid_critical and percent < critical:
            report.append(
                (
                    str(r[1]),
                    "\nOwner:",
                    str(r[8]),
                    "\nValues:",
                    str(r[5]),
                    "out of",
                    str(r[2]),
                    "\nPercent used: %d%% \n" % (percent),
                )
            )

report.sort(key=itemgetter(-1), reverse=True)

with open("report.txt", "a") as f:
    print("\n******************* Mid Critical: **************", file=f)
    print("\n".join(report))
1 голос
/ 10 июля 2019

Чтобы отсортировать данные, вам нужно вытащить данные из базы данных, отсортировать их, а затем распечатать в файл вместо записи в файл после каждой строки.Как то так:

def calc_percent(r):
    return r[5] / r[2] * 100

with open('report.txt', 'a') as f:
    print("\n******************* Mid Critical: **************", file=f)
    rows = []
    for r in cursor:  #show tables one by one
        if str(type(r[5])) == "<class 'decimal.Decimal'>":
            percent = calc_percent(r)
            if percent > mid_critical and percent < critical:
                rows.append(r)
    rows.sort(key=calc_percent)

    for r in rows:
        percent = calc_percent(r)
        print(r[1],"\nOwner:",r[8],"\nValues:",r[5],"out of", r[2] ,"\nPercent used: %d%% \n" %(percent), file=f)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...