在CSV中搜索字符串并将单元格列分配给列表

时间:2015-12-15 21:23:52

标签: python csv

我正在尝试创建一个程序,该程序将扫描CSV以查找IMG SRC标记,然后测试它们的响应。我坚持使用这部分代码,理想情况下会在整个CSV文档中搜索“SRC”代码。单元格(查找IMG SRC标记),然后将该列指定为运行测试的列。这是我的尝试:

src_check = ('SRC')
imp_check = ('Impression')

with open("ORIGINAL.csv", 'r') as csvfile:
    reader = csv.reader(csvfile)
    for i, row in enumerate(reader):
        for j, column in enumerate(row):
            if src_check in column[:]:
                list = [column[j] for column in csv.reader(csvfile)]

我的困惑来自以下事实:当我手动将列号输入到我的程序中时,它会按原样运行:它会测试列/列表的每个单元格,并巧妙地将结果写入每个测试的标记旁边。

为了重申我的问题,我希望这段代码能够找到整个CSV的第一个IMG SRC单元格。然后它会记下该列的编号,并且我可以将整个列分配给要运行的测试的列表。例如,之后的过程将是:

  1. 第16列已被识别为携带IMG SRC标签。
  2. 将列的内容分配给列表。
  3. 在列表上运行请求测试。
  4. 现在,测试结果列未与其测试的标记对齐。有没有人有更好的方法来查找基于字符串的单元格,然后将列指定为列表,与它正在测试的单元格一致?

2 个答案:

答案 0 :(得分:0)

我怀疑你的问题是两个csvReader都使用相同的文件描述符,因此偏移量全部搞砸了。
尝试做一个接一个的事情(和/或通过csvfile.seek(0)重置偏移量),它应该工作。

src_check = ('SRC')
with open("ORIGINAL.csv", 'r') as csvfile:
    reader = csv.reader(csvfile)
    col_index = -1
    for row in reader:
        for j, column in enumerate(row):
            if src_check in column:
                col_index = j
                break
        if col_index != -1:
            break
    else:
        raise ValueError("Column not found")
    csvfile.seek(0)
    col_vals = [column[col_index] for column in reader]
    print col_vals

编辑:你也不应该使用内置名称(如“list”)作为变量名。

答案 1 :(得分:0)

您需要首先找到列索引,然后在读取列之前将文件倒回到begnning:

src_check = ('SRC')
with open("ORIGINAL.csv", 'r') as csvfile:
    reader = csv.reader(csvfile)
    for row in reader:
         if src_check in row:
             col = row.index(src_check)
             break
     else:
         raise ValueError('SRC not found')
     # go back to beginning of the file
     csfile.seek(0)
     values = [row[col] for row in reader]