Rahul Gupta wrote: > consider the following code > import csv > import numpy as np > > with open("D:\PHD\obranking\\demo.csv", mode='r') as csv_file1, > open("D:\PHD\obranking\\demo.csv", mode='r') as csv_file2: > csv_reader1 = csv.DictReader(csv_file1) > csv_reader2 = csv.DictReader(csv_file2) > > > filename = "cell_split_demo.csv" > with open("D:\PHD\obranking\\cell_split_demo.csv", 'w') as csvfilew1: > fields = (range(0, 300)) > csvwriter1 = csv.DictWriter(csvfilew1, fieldnames=fields) > csvwriter1.writeheader() > > for i, row in enumerate(csv_reader1): > print(f"value_i({i}) label({row['label']})") > for j, line in enumerate(csv_reader2): > if j <= i: > matrixrows[j] = [] > if row['label'] != line['label']: > print(f"value_j({j})Unequal > label({line['label']})") > else: > print(f"value_j({j}) equal > label({line['label']})") pass > else: > break > csv_file2.seek(0) > Here is some of the out_put samples > value_i(0) label(BW) > value_j(0) equal label(BW) > value_i(1) label(BW) > value_j(0) Unequal label(label) > value_j(1) equal label(BW) > value_i(2) label(BW) > value_j(0) Unequal label(label) > value_j(1) equal label(BW) > value_j(2) equal label(BW) > You can see for j=0 while i goes from 1 to n it is not able to acess > line['label'] value. Kindly help what is wrong with this?
Without looking closely I would guess that seek(0) causes the reader to mistake the header for a data row. If your data fits into memory you can do rows = list(csv_reader1) for i, outer_row in enumerate(rows): ... for j, inner_row in enumerate(rows): ... With this aproach csv_reader2 is not needed at all. If that fails for lack of memory build a new csv_reader2 on every iteration csv_reader1 = csv.DictReader(csv_file1) for i, outer_row in enumerate(csv_reader1): csv_reader2 = csv.DictReader(csv_file2) ... for j, inner_row in enumerate(csv_reader2) ... csv_file2.seek(0) -- https://mail.python.org/mailman/listinfo/python-list