2017-08-24 2 views
1

Je dois traiter le fichier .txt qui a la structure .csv et qui est stocké sous forme de champ dans la base de données. La principale fonctionnalité de l'application est le traitement de ces fichiers et la génération d'une sortie.Fichier texte ouvert stocké sous forme d'enregistrement dans Django db

De temps en temps, j'ai besoin de télécharger une nouvelle version, mais garder l'enregistrement de l'ancien. Ce sont des fichiers minuscules, dépassant rarement 300kb. J'ai aussi besoin de champs supplémentaires avec le nom du téléchargeur, la date, la version etc., c'est pourquoi je le garde comme enregistrement dans la base de données plutôt que dans les fichiers locaux. Un enregistrement de fichier est stocké dans le DB de type models.FileField()

Comment puis-je accéder à ce dossier non pas comme un champ, mais comme un objet de fichier et l'ouvrir comme un .txt d'habitude?

Ce que j'ai essayé, mais cela n'a pas fonctionné:

listofschedules = ScheduleFile.objects.all 
file = listofschedules[0].csvSchedule 

with open(file, 'rt', encoding='windows 1250') as csv_input: 
     reader = csv.reader(csv_input, delimiter=';') 
     print(reader) ... 
+0

ouverture et l'analyse sont les premiers pas en effet, mais comment voulez-vous pour afficher le résultat? avez-vous déjà défini un modèle? – PRMoureu

+0

Oui, mais pour l'instant, j'essaie au moins de voir une sorte de confirmation que le fichier ouvert et en essayant d'utiliser simple print() pour le connecter dans la fenêtre du terminal. –

Répondre

2

Vous devez appeler all puis utilisez path de fichier, comme illustré dans the documentation. Ou pour ce test simple, vous pouvez utiliser first:

file = ScheduleFile.objects.first().csvSchedule 

with open(file.path, 'rt', encoding='windows 1250') as csv_input: 
    reader = csv.reader(csv_input, delimiter=';') 
    print(reader)