Heim  >  Artikel  >  Backend-Entwicklung  >  CSV – Lokale und Remote-Dateien in Python verarbeiten

CSV – Lokale und Remote-Dateien in Python verarbeiten

WBOY
WBOYOriginal
2024-08-28 18:30:37482Durchsuche

CSV - Process Local & Remote Files in Python

Hallo Programmierer!

In diesem Artikel wird ein Open-Source-Tool vorgestellt, das lokale und Remote-CSV-Dateien verarbeiten kann, die Informationen laden und drucken und die Spalte später Django-Typen zuordnen kann. Die Verarbeitung von CSV-Dateien ist normalerweise erforderlich, wenn der Datensatz groß wird, benutzerdefinierte Berichte von Excel nicht unterstützt werden oder eine vollständige Datenbearbeitung über Datentabellen erfolgt und eine API erforderlich ist.
Die aktuelle Liste der Funktionen kann weiter erweitert werden, um CSV-Dateien Datenbanktabellen/-modellen zuzuordnen und Dashboard-Webanwendungen vollständig zu generieren.

Quellcode: CSV-Prozessor, Teil des AppSeed-Dienstes (Open-Source)


Bevor wir beginnen, den Code und die Verwendung zu erklären, fassen wir die Funktionen des Tools zusammen:

  • Lokale und Remote-Dateien laden
  • Werte drucken
  • erkannte Spaltentypen drucken
  • Drucken Sie die Zuordnungstypen in ein Django-Modell

Der CSV-Parser kann über die CLI ausgeführt werden, nachdem die Projektquellen geklont und wie in der README-Datei erläutert nutzbar gemacht wurden. Sobald die Installation abgeschlossen ist, können wir den CVS-Prozessor mit diesem Einzeiler aufrufen:

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

Das Tool führt folgende Aufgaben aus:

  • Validieren Sie die Eingabe
  • Suchen Sie die CSV-Datei (mit Fehler beenden, wenn sie nicht gefunden wird)
  • lädt die Informationen und erkennt die Spaltentypen
  • erkennt den Django-Spaltentyp
  • drucken Sie die ersten 10 Zeilen

Dasselbe kann auf lokale und Remote-Dateien angewendet werden. Zum Beispiel können wir die berüchtigte Titanic.cvs analysieren, indem wir diesen Einzeiler ausführen:

$ 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)  

Hier sind die relevanten Teile des Tools:

Lädt die Informationen und prüft vorab, ob die Quelle lokal oder entfernt ist

    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'] )

Analysieren Sie die Header und ordnen Sie die erkannten Typen Django-Typen zu.

Für die tabellarische Ansicht wird Tabulate Library verwendet:

    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))

Der letzte Schritt besteht darin, die CSV-Daten auszudrucken:

    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 

An diesem Punkt bietet uns der Code Zugriff auf die CSV-Informationen, Datentypen und die entsprechenden Datentypen für Django. Das Mapping kann problemlos für jedes Framework wie Flask, Express oder NextJS erweitert werden.

Die Typzuordnung für Django ist diese:

# 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)',
}

Dieses Tool befindet sich in der aktiven Entwicklung und hier sind die nächsten Schritte:

  • Verbinden Sie das Tool mit weiteren Datenquellen wie entfernten/lokalen Datenbanken (SQLite, MySql, PgSQL), JSON
  • Generieren Sie Modelle für jedes Framework: FastAPI, Flask, Express, NextJS
  • Generieren Sie darüber hinaus sichere APIs
  • Generieren Sie serverseitig paginierte Datentabellen mit Tailwind/Bootstrap für das Styling

Danke fürs Lesen!

Wenn Sie daran interessiert sind, einen Beitrag zu leisten, können Sie sich gerne der neuen AppSeed-Plattform anschließen und sich mit der Community auf Discord vernetzen:

  • AppSeed – Open-Source-Plattform für Entwickler
  • AppSeed-Community – 3.000+ Discord-Mitglieder

Das obige ist der detaillierte Inhalt vonCSV – Lokale und Remote-Dateien in Python verarbeiten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn