"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > CSV - معالجة الملفات المحلية والبعيدة في بايثون

CSV - معالجة الملفات المحلية والبعيدة في بايثون

تم النشر بتاريخ 2024-08-29
تصفح:801

CSV - Process Local & Remote Files in Python

مرحبًا بالمبرمجين!

تقدم هذه المقالة أداة مفتوحة المصدر قادرة على معالجة ملفات CSV المحلية والبعيدة ، وتحميل المعلومات وطباعتها، ثم تعيين العمود لاحقًا إلى أنواع Django. عادةً ما تكون معالجة ملفات CSV مطلوبة عندما تصبح مجموعة البيانات كبيرة، وتكون التقارير المخصصة غير مدعومة بواسطة Excel أو المعالجة الكاملة للبيانات عبر جداول البيانات، وتكون هناك حاجة إلى واجهة برمجة التطبيقات (API).
يمكن توسيع قائمة الميزات الحالية بشكل أكبر لتعيين ملفات CSV لجداول/نماذج قاعدة البيانات وإنشاء تطبيقات الويب للوحة المعلومات بشكل كامل.

كود المصدر: جزء معالج CSV من خدمة AppSeed (مفتوح المصدر)


قبل أن نبدأ في شرح الكود والاستخدام، دعونا نلخص مميزات الأداة:

  • تحميل الملفات المحلية والبعيدة
  • طباعة القيم
  • طباعة أنواع الأعمدة المكتشفة
  • طباعة أنواع التعيين إلى نموذج Django

يمكن تنفيذ محلل CSV عبر واجهة سطر الأوامر (CLI) بعد استنساخ مصادر المشروع وجعله قابلاً للاستخدام كما هو موضح في الملف README. بمجرد اكتمال التثبيت، يمكننا استدعاء معالج CVS باستخدام هذه السطر الواحد:

$ python manage.py tool_inspect_source -f media/tool_inspect/csv_inspect.json

تقوم الأداة بالمهام التالية:

  • التحقق من صحة الإدخال
  • تحديد موقع ملف CSV (الخروج مع وجود خطأ إذا لم يتم العثور عليه)
  • يقوم بتحميل المعلومات ويكتشف أنواع الأعمدة
  • يكتشف نوع عمود Django
  • طباعة أول 10 صفوف

يمكن تطبيق الشيء نفسه على الملفات المحلية والبعيدة. على سبيل المثال، يمكننا تحليل ملف 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)',
}

هذه الأداة قيد التطوير النشط وإليك الخطوات التالية:

  • قم بتوصيل الأداة بمزيد من مصادر البيانات مثل قواعد البيانات البعيدة/المحلية (SQLite، MySql، PgSQL)، JSON
  • إنشاء نماذج لأي إطار عمل: FastAPI، Flask، Express، NextJS
  • إنشاء واجهات برمجة تطبيقات آمنة في الأعلى
  • إنشاء جداول بيانات مرقمة من جانب الخادم باستخدام Tailwind/Bootstrap للتصميم

شكرا على القراءة!

بالنسبة للمهتمين بالمساهمة، لا تتردد في الانضمام إلى منصة AppSeed الجديدة والتواصل مع المجتمع على Discord:

  • AppSeed - منصة مفتوحة المصدر للمطورين
  • مجتمع AppSeed - 3 آلاف من أعضاء Discord
بيان الافراج تم إعادة نشر هذه المقالة على: https://dev.to/sm0ke/csv-process-local-remote-files-in-python-3b64?1 إذا كان هناك أي انتهاك، فيرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3