Hello,
Je bloque depuis quelques temps sur un problème qui me semble venir de Django.
Pour faire court, je travail dans une société de bourse et tout les jours je reçois tous les ordres passés de la veille sous format CSV généré par un logiciel de passage d'ordre.
Sauf que le logiciel de passage d'ordre émet parfois des doublons qui ne sont différenciable que par leurs datetimes à la microseconde près.
Mon code se présente comme suit :
dups étant les doublons, la suppression fonctionne bien sauf que problème : le champ "trading_date_time" étant l'heure à laquelle l'ordre a été passé à la microseconde près n'est pris en compte que jusqu'a la seconde près et par conséquent, des ordres qui ne sont pas sensé être doublon sont supprimé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43 for i, l in enumerate(lines[1:], 2): attrs = l.split(";") data = dict(zip(CSV_HEADERS, attrs)) unique_ref = data["Transaction Reference Number"] arm_line, c = ArmLine.objects.get_or_create(transaction_reference_number = unique_ref) logger.debug("Parsing line no.%s, creation: %s" % (i, c)) arm_line.errors = "" arm_line.status = 0 arm_line.index = i arm_line.raw_line = l arm_line.report = self.report arm_line.import_dict(data) arm_line.full_clean() arm_line.save() # remove dups if self.filename[9:12] == 'SOM': dups = ArmLine.objects.filter(report = self.report, side = arm_line.side, quantity = arm_line.quantity, price = arm_line.price, security_id = arm_line.security_id, trading_date_time = arm_line.trading_date_time) dups = dups.exclude(transaction_reference_number = arm_line.transaction_reference_number) if dups: logger.warn("Removing duplicate %s" % dups) dups.delete() # update indexes, dups messed them up for i, arm_line in enumerate(self.report.lines.all().order_by('index'), 2): arm_line.index = i arm_line.save() # update files on disk self.report.write()
Je sais pas si j'ai été claire dans mon explication, j'en apporterais d'avantage si besoin.
C'est un problème qui devient de plus en plus urgent car je suis actuellement obligé de traiter les doublons à la main ce qui me prends énormément de temps.
Je précise que je suis en Python 2.7.9 et en Django 1.9.13.
Merci d'avance pour votre aide.
Partager