Reputation: 65
I wrote a script that at one point generates a bunch of empty lists applying a code with the structure:
A,B,C,D=[],[],[],[]
which produces the output:
A=[]
B=[]
C=[]
D=[]
The way it is right now, I have to manually modify the letters each time I use a different dataset as an input. I want to be able to automatize that. I thought about doing this:
FieldList=[A,B,C,D]
bracket=[]
[[0]for field in FieldList]
for field in FieldList:
bracket=bracket+["[]"]
FieldList=bracket
Here I was trying to replicate " A,B,C,D=[],[],[],[]", but evidently that's not how it works.
I also tried:
FieldList=[A,B,C,D]
bracket=[]
[[0]for field in FieldList]
for field in FieldList:
field=[]
But at the end it just produces a single list call "field".
#So, this is what I need the lists for. I will be reading information from a csv and adding the data I'm extracting from each row to the lists. If generate a "list of lists", can I still call each of them individually to append stuff to them?
A,B,C,D=[],[],[],[]
with open(csvPath+TheFile, 'rb') as csvfile: #Open the csv table
r = csv.reader(csvfile, delimiter=';') #Create an iterator with all the rows of the csv file, indicating the delimiter between columns
for i,row in enumerate(r): #For each row in the csv
if i > 0: #Skip header
A.append(float(row[0])) #Extract the information and append it to each corresponding list
B.append(float(row[1]))
C.append(format(row[2]))
D.append(format(row[3]))
Upvotes: 4
Views: 9627
Reputation: 231
Check the accepted answer here. (Answer by To Click or Not to Click)
>>> obj = {}
>>> for i in range(1, 21):
... obj['l'+str(i)] = []
...
>>>obj
{'l18': [], 'l19': [], 'l20': [], 'l14': [], 'l15': [], 'l16': [], 'l17': [], 'l10': [], 'l11': [], 'l12': [], 'l13': [], 'l6': [], 'l7': [], 'l4': [], 'l5': [], 'l2': [], 'l3': [], 'l1': [], 'l8': [], 'l9': []}
>>>
Upvotes: 0
Reputation: 24788
Based on your usage example, what you actually want is zip()
:
For this example, note that csv.reader()
basically breaks the file up into data of the form:
[
["a1", "b1", "c1", "d1"],
["a2", "b2", "c2", "d2"],
...,
["an", "bn", "cn", "dn"]
]
The Example:
table = [
[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12],
]
#How to transpose the data into columns??? Easy!
columns = zip(*table)
Now, you have a variable, columns
, of the form:
columns = [
[1, 5, 9],
[2, 6, 10],
[3, 7, 11],
[4, 8, 12]
]
Okay so let's apply this to a csv file:
with open("mycsv.csv", "rb") as infile:
reader = csv.reader(infile, delimiter=";")
next(reader, None) #skip the header
columns = zip(*reader)
That's it!
Note: For this example, we are assuming that "mycsv.csv"
has the correct number of columns in every row. You may need to implement a check to make sure that all of the rows are "filled in".
Upvotes: 1
Reputation: 1121864
You are overcomplicating things. Just use a list or dictionary:
fields = {key: [] for key in 'ABCD'}
then refer to fields['A']
, etc. as needed, or loop over the structure to process each in turn.
Upvotes: 9