J'ai deux fichiers CSV que je dois joindre. L'un des fichiers contient une partie des informations que je veux. J'ai créé un dictionnaire des informations dont j'ai besoin à partir du CSV 1 et je dois écrire ce dictionnaire dans le CSV 2. Je voudrais écrire les clés du dictionnaire à leur ID approprié dans le CSV 2.
Comment puis-je écrire le dictionnaire dans le CSV2 ? Mon code remplit chaque entrée de la colonne "animal" avec la même valeur.
Des exemples du dictionnaire, du CSV2 et du CSV de sortie sont fournis pour permettre l'interprétation du code.
Code ci-dessous
Dictionary
{'511': 'Dog', '611': 'Cat'}
CSV
ID, Location, Country
511, Stack, USA
611, Overflow Mexico
711, Stack USA
Expected CSV
ID, Location, Country, Pet
511, Stack, USA, Dog
611, Overflow, Mexico, Cat
711, Stack USA,
Output Generated CSV
ID, Location, Country, Pet
511, Stack, USA, Dog
611, Overflow, Mexico, Dog
711, Stack USA, Dog
def readfile(filename):
global map
with open(filename, 'rb') as file:
map = {}
reader = csv.reader(file)
for row in reader:
#print row[0]
key = row[0]
if key in map:
pass
map[key] = row[1:]
file.close()
return True
#print map.keys()
def writefile(filename):
Location = 'Location'
tmpfile = filename + '_tmp.csv'
with open(filename, 'rb') as input:
with open(tmpfile,'w+b') as output:
dreader = csv.DictReader(input, delimiter=',')
fieldnames = dreader.fieldnames
fieldnames.append(Location)
print('I am here 1')
csvwriter = csv.DictWriter(output,fieldnames, delimiter = ',')
#csvwriter.writeheader()
try:
csvwriter.writeheader()
except AttributeError:
headers = []
for h in fieldnames:
headers.append((h,h))
csvwriter.writerow(dict(headers))
print('I am here 2')
try:
for row in dreader:
for col in row:
if col is None: continue
s = row[col]
if s is not None:
row[col] = s.replace('"', '\'').replace('\\','\\\\').strip()
if row[col] == "NULL":
row[col] = ''
for key,value in map.iteritems():
if len(value) == 1 and key == 'ID':
pass
else:
row[Location] = value[0]
# w.writeheader()
csvwriter.writerow(row)
#print('I am here')
except Exception:
print ('Could not write appropriate value')