I am trying to write A
in multiple folders, namely, 1,2,3,4,5
with file name A.txt
. But I am getting an error. How do I fix it?
import os Runs=5 def function(run): from scipy.stats import truncnorm import numpy as np import csv parent_folder = str(run + 1) os.mkdir(parent_folder) A=3 ###################################### with open(os.path.join(parent_folder, rf"A.txt"), 'w+') as f: #print("A =",[A]) writer = csv.writer(f) writer.writerow(A) for x in range(Runs): function(x)
The error is
in function writer.writerow(A) Error: iterable expected, not int
Advertisement
Answer
There appears to be a dearth of answers explaining what the actual problem is among the possible duplicates on this site, so here goes.
csv.csvwriter.writerow
expects an iterable of elements that represents a row of data. It can’t and won’t guess that a single element should be treated specially (what the error is telling you). If you try to pass in something that’s only accidentally an iterable, such as a string, each character will be treated as a separate element. To correctly write a row, wrap it in an iterable, such as a list, tuple, or even generator:
[A] (A,) (A for _ in range(1))
A similar thing happens with csv.csvwriter.writerows
. The function expects an iterable of rows, which are themselves iterables. A nested list or tuple will do, but you can’t pass in scalars or single-level iterables. In the latter case, iterating over scalar elements and attempting to treat them as rows will result in the same error as you saw, for the same reason.