CSV – Lokale und Remote-Dateien in Python verarbeiten

WBOY
Freigeben: 2024-08-28 18:30:37
Original
323 Leute haben es durchsucht

CSV - Process Local & Remote Files in Python

Hallo Programmierer!

In diesem Artikel wird einOpen-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
Nach dem Login kopieren

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)
Nach dem Login kopieren

Hier sind die relevanten Teile des Tools:

Lädt die Informationenund 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'] )
Nach dem Login kopieren

Analysieren Sie die Headerund 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))
Nach dem Login kopieren

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
Nach dem Login kopieren

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)', }
Nach dem Login kopieren

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!

Quelle:dev.to
Erklärung dieser Website
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
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!