The problem is that the content of your CSV are not variables, but strings. Your CSV file contains literally the string "jan1,A". Now, it is possible in Python to manipulate variables directly via their name, because everything is (pretty much) dictionaries all the way down. However, be aware that you're venturing into a weird, unmaintainable and downright mad path. Messing with the 'internals' like that should only be used with the utmost precaution, and avoided if at all possible.
On to your problem: I mentionned that Python is dictionaries all the way down. Specifically, the vars(), locals() and globals() might be what you're looking for:
>>> env = globals()
>>> a = 2
>>> env['a']
2
>>> env['b'] = 3
>>> b
3
What trickery is that ? Python maintains the state of its scope in dictionaries, and you can access these dictionaries directly, and manipulate them like any other dictionary. More specifically, locals() and globals() give you direct access to it. The module system makes it a bit more complex (as each module maintains its own globals), but let us assume that you're operating in a single module.
So let's assume you have started your interpreter, and defined the following variables:
>>> A = 1
>>> B = 2
>>> C = 3
And you want to define the new variables jan1, jan2, jan3, ... for these variables, according to the rules specified in your CSV. Let us ignore the CSV part for now (Danny Cullen's answer about the csv module is pretty spot on for that), and let us assume that you've loaded your CSV into a list of tuples:
>>> csv
[('jan1', 'A'),
('jan2', 'B'),
('jan3', 'C'),
('jan4', 'A'),
('jan5', 'B'),
('jan6', 'C')]
Now you want to set variable jan1 with the value of variable A. You can do that by modifying the globals() dict of your module, and getting the locals() value of your variable:
>>> glob = globals()
>>> loc = locals()
>>> glob['jan1'] = loc['A']
>>> jan1
1
Automating the whole reading is then trivial:
>>> for var_to_set, value_to_get in csv:
... glob[var_to_set] = loc[value_to_get]
>>>
>>> jan5
2
This will solve your problem, but let me emphasize what others have said: this is dangerous, completely unmaintainable and should generally be avoided ! One reason for that is that it's pretty straightforward to go from 'string' to 'variable' (we just did). On the other hand, it is impossible to go from variable back to string ! jan1 holds a value, and nothing else, it has no way of knowing that you refer to it as "jan1". So the process is lossy. On the other hand, carrying around various dictionaries with your mapping can always be 'converted back', without even going through these 'variable lookup' hoops (just keep the keys in sync).
In addition, I have mentionned above that modules have different globals. That rabbit hole goes deeper as functions, classes, modules, packages will all define their local scope, and variously refer to the globals and locals in different instances. This example works well on a tiny project, in a CLI, but it is impossible to scale this: keeping track of who adds what, where and how is rendered almost impossible when you start getting your hands dirty with the variable dictionaries.
If you really have to go the 'variable definition' way, I highly suggest you get familiar with the scoping rules in Python, and get prepared for quite a few headaches tracking down 'code that doesn't look like code'...