代码之家  ›  专栏  ›  技术社区  ›  tariq Yousef

获取索引器:执行后列表索引超出范围

  •  -2
  • tariq Yousef  · 技术社区  · 7 年前

    添加了文本代码,很抱歉给您带来不便,我只是想在我的帖子中包含终端输出。

    edit2:删除了所有图像,这是我最新的代码+文本格式的输入/输出,我在输入文件中发现了错误,但我无法用代码修复它,当我手动编辑文件时,文件末尾有一个完全空的行,返回空格以删除它。代码工作正常,无论如何,有没有办法解决这个问题,我的csv文件是由airodump自动生成的,我不知道我是否可以控制它们的格式。

    #!/usr/bin/env python
    
    import time
    import csv
    
    #def nonblank_lines(f):
    #   for l in f:
    #       line = l.rstrip()
    #       if line:
    #           yield line
    
    with open('root-01.csv', 'r') as csv_file:
    csv_reader = csv.reader(csv_file)
    with open('station_value.csv', 'w') as station_file:
        csv_writer = csv.writer(station_file, delimiter = ',')
        for skip in range(4):
            next(csv_reader)
        for line in csv_reader:
            csv_writer.writerow(line)
    
    with open('station_value.csv', 'r') as csv_file2:
    #   for line in nonblank_lines(csv_file2):
    csv_reader2 = csv.reader(csv_file2)
    with open('pwr_value.csv', 'w') as pwr_file:
        csv_writer2 = csv.writer(pwr_file, delimiter = ',')
        for line in csv_reader2:
            try:    
                print(line)     
                csv_writer2.writerow([line[3]])
            except Exception as details:
                print('Invalid data:',line,'rejected due to',details)
    

    这是我的文本格式输入文件:

    根-01。csv

    BSSID, First time seen, Last time seen, channel, Speed, Privacy, Cipher, Authentication, Power, # beacons, # IV, LAN IP, ID-length, ESSID, Key
    
    1C:5F:2B:0A:02:58, 2017-12-02 04:01:06, 2017-12-02 04:02:34,  6,  54, WPA2, CCMP TKIP,PSK, -85,      654,      155,   0.  0.  0.  0,   6, Halbos, 
    
    
    
    Station MAC, First time seen, Last time seen, Power, # packets, BSSID, Probed ESSIDs
    
    40:40:A7:67:90:0E, 2017-12-02 04:01:16, 2017-12-02 04:02:33,  -1,       63, 1C:5F:2B:0A:02:58,
    
    80:3F:5D:F9:1F:AB, 2017-12-02 04:01:22, 2017-12-02 04:02:09,   0,      557, 1C:5F:2B:0A:02:58,
    

    station_值。csv

    Station MAC, First time seen, Last time seen, Power, # packets, BSSID, Probed ESSIDs
    
    40:40:A7:67:90:0E, 2017-12-02 04:01:16, 2017-12-02 04:02:33,  -1,       63, 1C:5F:2B:0A:02:58,
    
    80:3F:5D:F9:1F:AB, 2017-12-02 04:01:22, 2017-12-02 04:02:09,   0,      557, 1C:5F:2B:0A:02:58,
    

    pwr_值。csv

     Power
    
      -1
    
       0
    

    获取station_值。csv工作正常,当我想从statio_值中获取第[3]行的值时,出现了问题(据我所知)。csv并将其写入新文件pwr_值。csv,因为在桩号文件的末尾有一个额外的行,其大小与前几行不同。我试图获取堆栈跟踪,但无法获取,因为调试工具在我打开堆栈跟踪时总是显示空白。

    我也不明白为什么即使有错误,仍然生成pwr_值文件?

    1 回复  |  直到 7 年前
        1
  •  0
  •   BoarGules    7 年前

    我必须在这里做一些假设,因为您没有发布堆栈跟踪,也没有发布示例数据文件。但是唯一可能出现这种错误的地方是第9行,而出现这种错误的唯一原因是,您希望csv文件有4列,而文件的一行(据猜测,最后一行)没有。我怀疑在输入文件的末尾有一个尾随的空行,但它可能是在中间的duff数据。A. print 语句(正如timgeb所建议的)会很好,但您也可以在代码中设置一个永久的验证陷阱,例如,

    for line in csv_reader:
        try:
            print(line[3])
        except Exception as details:
            print('Invalid data:',line,'rejected due to',details)