مرحبًا بالمبرمجين!
تقدم هذه المقالة أداة مفتوحة المصدر قادرة على معالجة ملفات CSV المحلية والبعيدة ، وتحميل المعلومات وطباعتها، ثم تعيين العمود لاحقًا إلى أنواع Django. عادةً ما تكون معالجة ملفات CSV مطلوبة عندما تصبح مجموعة البيانات كبيرة، وتكون التقارير المخصصة غير مدعومة بواسطة Excel أو المعالجة الكاملة للبيانات عبر جداول البيانات، وتكون هناك حاجة إلى واجهة برمجة التطبيقات (API).
يمكن توسيع قائمة الميزات الحالية بشكل أكبر لتعيين ملفات CSV لجداول/نماذج قاعدة البيانات وإنشاء تطبيقات الويب للوحة المعلومات بشكل كامل.
كود المصدر: جزء معالج CSV من خدمة AppSeed (مفتوح المصدر)
قبل أن نبدأ في شرح الكود والاستخدام، دعونا نلخص مميزات الأداة:
يمكن تنفيذ محلل CSV عبر واجهة سطر الأوامر (CLI) بعد استنساخ مصادر المشروع وجعله قابلاً للاستخدام كما هو موضح في الملف README. بمجرد اكتمال التثبيت، يمكننا استدعاء معالج CVS باستخدام هذه السطر الواحد:
$ python manage.py tool_inspect_source -f media/tool_inspect/csv_inspect.json
تقوم الأداة بالمهام التالية:
يمكن تطبيق الشيء نفسه على الملفات المحلية والبعيدة. على سبيل المثال، يمكننا تحليل ملف Titanic.cvs سيئ السمعة عن طريق تشغيل هذه الجملة:
$ python manage.py tool_inspect_source -f media/tool_inspect/csv_inspect_distant.json # Output > Processing .\media\tool_inspect\csv_inspect_distant.json |-- file: https://raw.githubusercontent.com/datasciencedojo/datasets/master/titanic.csv |-- type: csv Field CSV Type Django Types ----------- ---------- ------------------------------------------ PassengerId int64 models.IntegerField(blank=True, null=True) Survived int64 models.IntegerField(blank=True, null=True) Pclass int64 models.IntegerField(blank=True, null=True) Name object models.TextField(blank=True, null=True) Sex object models.TextField(blank=True, null=True) Age float64 models.FloatField(blank=True, null=True) SibSp int64 models.IntegerField(blank=True, null=True) Parch int64 models.IntegerField(blank=True, null=True) Ticket object models.TextField(blank=True, null=True) Fare float64 models.FloatField(blank=True, null=True) Cabin object models.TextField(blank=True, null=True) Embarked object models.TextField(blank=True, null=True) [1] - PassengerId,Survived,Pclass,Name,Sex,Age,SibSp,Parch,Ticket,Fare,Cabin,Embarked [2] - 1,0,3,"Braund, Mr. Owen Harris",male,22,1,0,A/5 21171,7.25,,S [3] - 2,1,1,"Cumings, Mrs. John Bradley (Florence Briggs Thayer)",female,38,1,0,PC 17599,71.2833,C85,C [4] - 3,1,3,"Heikkinen, Miss. Laina",female,26,0,0,STON/O2. 3101282,7.925,,S [5] - 4,1,1,"Futrelle, Mrs. Jacques Heath (Lily May Peel)",female,35,1,0,113803,53.1,C123,S [6] - 5,0,3,"Allen, Mr. William Henry",male,35,0,0,373450,8.05,,S [7] - 6,0,3,"Moran, Mr. James",male,,0,0,330877,8.4583,,Q [8] - 7,0,1,"McCarthy, Mr. Timothy J",male,54,0,0,17463,51.8625,E46,S [9] - 8,0,3,"Palsson, Master. Gosta Leonard",male,2,3,1,349909,21.075,,S [10] - 9,1,3,"Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg)",female,27,0,2,347742,11.1333,,S ... (truncated output)
إليك الأجزاء ذات الصلة من الأداة:
يقوم بتحميل المعلومات ويتحقق مسبقًا من المصدر إذا كان محليًا أو بعيدًا
print( '> Processing ' ARG_JSON ) print( ' |-- file: ' JSON_DATA['source'] ) print( ' |-- type: ' JSON_DATA['type' ] ) print( '\n') tmp_file_path = None if 'http' in JSON_DATA['source']: url = JSON_DATA['source'] r = requests.get(url) tmp_file = h_random_ascii( 8 ) '.csv' tmp_file_path = os.path.join( DIR_TMP, tmp_file ) if not file_write(tmp_file_path, r.text ): return JSON_DATA['source'] = tmp_file_path else: if not file_exists( JSON_DATA['source'] ): print( ' > Err loading SOURCE: ' JSON_DATA['source'] ) return csv_types = parse_csv( JSON_DATA['source'] )
تحليل الرؤوس وتعيين الأنواع المكتشفة لأنواع جانغو.
للعرض الجدولي، يتم استخدام مكتبة الجداول:
csv_types = parse_csv( JSON_DATA['source'] ) #pprint.pp ( csv_types ) table_headers = ['Field', 'CSV Type', 'Django Types'] table_rows = [] for t in csv_types: t_type = csv_types[t]['type'] t_type_django = django_fields[ t_type ] table_rows.append( [t, t_type, t_type_django] ) print(tabulate(table_rows, table_headers))
الخطوة الأخيرة هي طباعة بيانات CSV:
csv_data = load_csv_data( JSON_DATA['source'] ) idx = 0 for l in csv_data: idx = 1 print( '[' str(idx) '] - ' str(l) ) # Truncate output .. if idx == 10: print( ' ... (truncated output) ' ) break
في هذه المرحلة، يوفر لنا الكود إمكانية الوصول إلى معلومات CSV وأنواع البيانات وأنواع البيانات المقابلة لـ Django. يمكن توسيع التعيين بسهولة لأي إطار عمل مثل Flask أو Express أو NextJS.
تعيين النوع لـ Django هو هذا:
# Pandas Type django_fields = { 'int' : 'models.IntegerField(blank=True, null=True)', 'integer' : 'models.IntegerField(blank=True, null=True)', 'string' : "models.TextField(blank=True, null=True)", 'string_unique' : "models.TextField(blank=True, null=False, unique=True)", 'object' : "models.TextField(blank=True, null=True)", 'object_unique' : "models.TextField(blank=True, null=False, unique=True)", 'int64' : 'models.IntegerField(blank=True, null=True)', 'float64' : 'models.FloatField(blank=True, null=True)', 'bool' : 'models.BooleanField(null=True)', }
هذه الأداة قيد التطوير النشط وإليك الخطوات التالية:
شكرا على القراءة!
بالنسبة للمهتمين بالمساهمة، لا تتردد في الانضمام إلى منصة AppSeed الجديدة والتواصل مع المجتمع على Discord:
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3