error in CSV resetting with seek(0)
Peter Otten
__peter__ at web.de
Sat May 2 00:52:25 EDT 2020
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)
More information about the Python-list
mailing list