如何使用python从csv文件的字符串下读取特定列?

时间:2019-04-30 12:13:11

标签: python python-2.7 csv

我正在运行系统性能测试,我需要检查CSV文件中的测试结果。例如,我的test.csv文件在下面共享:

https://docs.google.com/spreadsheets/d/1lUldk4N_5kEAETWdd2B5-x0UOpA_O0aus7x49fEqnPk/edit?usp=sharing

请注意,结果“通过”或“失败”将是超链接。

问题:我需要检查驱动程序问题测试是否通过。例如,如果我运行100个周期,deviceproblem下的结果将被列出100次。如果100个周期中甚至只有1个失败,则该测试被视为失败。

我能够在“ driverproblem”字段下获取一行的值(结果),但是我正在获得该行中存在的所有其他字段的超链接的结果,而不仅仅是一个字段。

有什么办法,我可以在以下字段中获得结果“ PASS”或“ FAIL”:“ driverproblem”或“ Devicemanager”或“ Crash”?

我尝试过以下方法:

with open(filename, 'r') as csv_file:
for index,row in enumerate(csv_file):
        if "driverproblem" in row.split(','):
            for i in range(10):
                line = csv_file.next().split()
                a= line[2].split(',')
                print a

但是我得到的结果如下:

  

['PASS:Basictest“”)“','” = HYPERLINK(“” .. \ .. \ Reports \ testreport_03-20-19-07-37-01 \ 1.1.1_test_os \ Driver_info.xml“” ','“” PASS“”)“','” = HYPERLINK(“ .. \ .. \ Reports \ testreport_03-20-19-07-37-01 \ 1.1.1_TEST_SYS \ drivertest_Log_Delta.xml”“',' '“”“ PASS”“)”','“ = HYPERLINK(” .. \ .. \ Reports \ testreport_03-20-19-07-37-01 \ systemtestlogss \ systemtestlogs.csv“”','“” PASS “”)“','” = HYPERLINK(“ .. \ .. \ Reports \ testreport_03-20-19-07-37-01 \ systemtestlogss \ systemtestlogs.csv”“','”“ PASS”“)” ','“ = HYPERLINK(”“ .. \ .. \ Reports \ testreport_03-20-19-07-37-01 \ systemtestlogss \ systemtestlogs.csv”“,'”“ PASS:Connected(via']

而我只需要一个字段 ""=HYPERLINK(""..\\..\\Reports\\testreport_03-20-19-07-37-01\\1.1.1_TEST_SYS\\drivertest_Log_Delta.xml""', '""PASS"")",位于csv文件的“ Drivertest”字段下。

1 个答案:

答案 0 :(得分:0)

尝试一下:

with open("test.csv", 'r') as csv_file:
        arr = []
        crash = []
        devicemanager = []
        for row in csv_file:                              
                rowarr = row.split(',')
                arr.append(rowarr)
                devicemanager.append(rowarr[5])
                crash.append(rowarr[7])

输出:

['\n', '\n', '\n', '\n', '\n', '\n', 'Crash\n', 'PASS\n', 'NA']
['', '', '', '', '', '', 'Devicemanager', 'PASS', 'NA']

您可以遍历列表崩溃和设备管理器以找到“通过”和“失败”字段。请注意,这是test.csv的第5列和第7列。

Total No Of Cycles,2,,,,,,
Passed Cycles,2,,,,,,
Failed Cycles,0,,,,,,
Ignored Cycles,0,,,,,,
,,,,,,,
,,,,,,,
Cycle Number,Cycle PASS/FAIL,Expected State,Test,Driver problem,Devicemanager,Memory Dump,Crash
1,PASS,S4,PASS:S4,PASS,PASS,PASS,PASS
2,PASS,S4,PASS:S4,NA,NA,NA,NA

声明:Python 2.7将于2020年1月1日到期,请升级您的Python,因为在该日期之后将不再维护Python 2.7。 源:repl.it

要获得更干净的版本,请使用csv模块-更快地编写代码:

import csv

csv_file_path = 'test.csv'
csvFile = open(csv_file_path,'r')
csvrdr = csv.reader(csvFile, delimiter=',')
devicemanager = []
crash = []
for row in csvrdr:
    devicemanager.append(row[5])
    crash.append(row[7])


print(crash)
print(devicemanager)

输出:

['', '', '', '', '', '', 'Crash', 'PASS', 'NA']
['', '', '', '', '', '', 'Devicemanager', 'PASS', 'NA']

这两个示例都可以在python 2和3上运行,因此,由于不推荐使用python 2,因此您应该考虑升级到python 3。