簡體   English   中英

如何在python中打印唯一行

[英]How do you print unique rows in python

我正在從oracle db中提取數據,需要在標准輸出中打印唯一值:

我的數據是這樣的:

server1.CRITICAL_INCIDENTS 1418223897 0.000000 host=server1 type=oracle_database source=Oracle dc=DC1
server1.ResponseTimepertransaction 1418223577 2.467900 host=server1 type=oracle_database source=Oracle dc=DC1
server1.DataDictionaryHitPercent 1418223577 100.000000 host=server1 type=oracle_database source=Oracle dc=DC1
server1.FullIndexScanspersecond 1418223577 0.000000 host=server1 type=oracle_database source=Oracle dc=DC1
server1.ExecutesPerformedwithoutParsesPercent 1418223577 66.666667 host=server1 type=oracle_database source=Oracle dc=DC1
server1.SortsinMemoryPercent 1418223577 100.000000 host=server1 type=oracle_database source=Oracle dc=DC1
server1.BufferCacheHitPercent 1418223577 100.000000 host=server1 type=oracle_database source=Oracle dc=DC1
server1.DatabaseCPUTimePercent 1418223577 81.048665 host=server1 type=oracle_database source=Oracle dc=DC1
server1.CRITICAL_INCIDENTS 1418223897 0.000000 host=server1 type=oracle_database source=Oracle dc=DC1
server1.CRITICAL_INCIDENTS 1418223897 0.2000000 host=server1 type=oracle_database source=Oracle dc=DC1
server1.ResponseTimepertransaction 1418223577 2.467900 host=server1 type=oracle_database source=Oracle dc=DC1

當我打印此值時,我只需要打印唯一值。 來自Oracle的數據是日期格式,當我將其轉換為紀元時,對於相同的指標,我可能同時獲得重復的值。 如果時間戳記和度量標准的值相同,則只需要打印其中之一即可。

例如,我只需要打印這些行之一。 它們具有相同的時間(1418223897)和相同的度量標准(server1.CRITICAL_INCIDENTS)。 值是不同的,一個是0.0000000和0.2000000,但是可以使用不同的值。

server1.CRITICAL_INCIDENTS 1418223897 0.000000 host=server1 type=oracle_database source=Oracle dc=DC1
    server1.CRITICAL_INCIDENTS 1418223897 0.2000000 host=server1 type=oracle_database source=Oracle dc=DC1

我嘗試了這個:

import pyodbc
import re
sql="DateTime, Server, Server_Type, Metric, Value from oracle_table"

cnxn = pyodbc.connect("DSN=dsn1;UID=userid;PWD=passwd123")

cursor = cnxn.cursor()


cursor.execute(sql)
row = cursor.fetchall()

    seenAlready = set()
    for line in row:
        if line[4]:
            if float(line[4])>=0:
                outputLine = line[0],line[1],line[2],line[3],line[4]
                outputLine1=line[0],line[3] #DateTime and Metric

                if outputLine1 in seenAlready:
                            continue
                    else:
                            print ' '.join([str(i) for i in outputLine])
                            seenAlready.add(outputLine1)

這不是很有效,因為即使tought DateTime和Metric都一樣,每行可能都是唯一的,因為Value可能不同。

如何解決此問題,以便只為同一DateTime和Metric行打印一行?

如果您收集所有數據並將其放入集合中(或將每個列放入其自己的集合中),那么您將永遠不會有重復項,因為集合只能具有唯一項。 如果一個值與另一個值完全相同,則嘗試將其添加到集合中時,應忽略該值。 之后,您可以使用打印功能遍歷該設置。

seenAlready = set()
for line in row:
    if line[4]:
        if float(line[4])>=0:
            outputLine = line[0],line[1],line[2],line[3],line[4]
            outputLine1=line[0],line[3] #DateTime and Metric

            seenAlready.add(outputLine1)

for line in seenAlready:
    print(line) #or whatever formatted value you need to print

這樣的事情,或與之相同的想法。 從該組進行打印將是最有意義的,因為可以確保您擁有一組獨特的項目。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM