我正在尝试创建一个程序,该程序将扫描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单元格。然后它会记下该列的编号,并且我可以将整个列分配给要运行的测试的列表。例如,之后的过程将是:
现在,测试结果列未与其测试的标记对齐。有没有人有更好的方法来查找基于字符串的单元格,然后将列指定为列表,与它正在测试的单元格一致?
答案 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]