Mehr

Verwenden von ArcPy zum Lesen von Excel-Tabellen in Python-Wörterbuch

Verwenden von ArcPy zum Lesen von Excel-Tabellen in Python-Wörterbuch


Wie würde ich ein Skript erstellen, das eine angegebene Excel-Tabelle liest und die Werte in einem Wörterbuch ablegt?

Ich habe über die xlrd-Bibliothek gelesen und wie sich die Bibliothek bei solchen Bemühungen bemüht, Excel-Tabellen in Python zu lesen. Ich hatte jedoch gehofft, dies ausschließlich im ArcPy-Modul zu tun. Ist dies möglich oder müssten Sie die xlrd-Bibliothek verwenden?


Gemäß dem Vorschlag anderer Benutzer sollten Sie das Excel-zu-Tabellen-GP-Tool mit SearchCursor verwenden, um das Wörterbuch in Python zu erstellen. Hier ist ein Beispielcode:

Beispieldaten in einer Excel-Datei:

col1 col2 col3 --------------------- val1 val2 val3 val4 val5 val6 import arcpy inputExcel = r"D:Test.xls" sheetName = "Sheet1" memoryTable = "in_memory" + "" + "memoryTable" #Stellen Sie sicher, dass der Speicher leer ist arcpy.Delete_management(memoryTable) arcpy.ExcelToTable_conversion(inputExcel, memoryTable,sheetName ) d = {} fieldIndices = {} fields = arcpy.ListFields(memoryTable ) für i,field in enumerate(fields): d[field.name]=[] fieldIndices[i] = field.name with arcpy.da.SearchCursor(memoryTable, '*') als Cursor: für Zeile im Cursor: for i in range(0,len(row)): d[fieldIndices[i]].append(row[i]) del Cursor

Und das Ausgabe-Python-Wörterbuch:

>>> d {u'ObjectID': [1, 2], u'col1': [u'val1', u'val4'], u'col2': [u'val2', u'val5'], u'col3': [u'val3', u'val6']}

Ich hoffe, es hilft


Lesen Sie eine Excel-Datei, die Bevölkerungsdaten von Landkreisen enthält, und berechnen Sie Zusammenfassungen nach Bundesland, Landkreis

Im Rahmen der Übung im Buch "Automate the langweilig stuff with Python" Kapitel 13 zu Excel hatte ich folgende Übung:

  1. Liest die Daten aus der Excel-Tabelle
  2. Zählt die Anzahl der Volkszählungsbezirke in jedem Landkreis
  3. Zählt die Gesamtbevölkerung jedes Landkreises
  4. Druckt die Ergebnisse aus

Hier ist der Aufbau der Tabelle

Hier ist mein Code und ich würde gerne Bewertungen erhalten, wie ich diesen Code verbessern kann, da ich noch ziemlich neu in Python bin.


Berechnen Sie Schäden und Einsparungen für Kfz-Versicherungsansprüche

Die Beschreibungen der Spalten sind: (A) das Jahr des Anspruchs, (B) die Versicherungsgesellschaft (C) ob das Fahrzeug gefahren wird, (D) Umstandscode (E) Verspätung bei der Geltendmachung des Anspruchs (F) Fahrzeugalter (G .) ) Schadensersatz (H) Einsparungen.

Die Spalten für Schäden und Einsparungen sind leer: Ich muss die Spalten Schäden und Einsparungen mit den Gewichten/Werten jeder der Spalten (A) bis (F) füllen. Die Gewichte dieser Spalten sind in einer anderen Tabelle angegeben. Die andere Tabelle hat wieder 2 Blätter (i) sind Schadenswerte und (ii) sind Sparwerte.

Ich habe einen einfachen Wörterbuchverständniscode wie diesen erstellt:

Ich wollte jedoch überprüfen, ob es einen besseren Ansatz / eine bessere Alternative als diesen Ansatz gibt. Vielleicht ein verständnisbasierter Ansatz, bei dem die for-Schleifen vermieden werden können?

Ich habe das Gefühl, dass es hier ein wenig hart codiert ist, mit vielen Indizes (Spaltenindizierung). Der ursprüngliche Datensatz hat viele Spalten, die die Indizes ausgeben, kann umständlich sein.

Die Tabellen mit den Werten der Spalten, in denen diese Gewichte vorhanden sind, haben separate Schadens- und Einsparungsblätter. Vielleicht kann dies nahtlos integriert werden, ohne die Berechnungen zweimal durchzuführen?


Lesen von Textdateien in Python

Textdateien sind eines der gängigsten Dateiformate zum Speichern von Daten. Python macht es sehr einfach, Daten aus Textdateien zu lesen.

Python bietet die offen() Funktion zum Lesen von Dateien, die den Dateipfad und den Dateizugriffsmodus als Parameter verwenden. Zum Lesen einer Textdatei ist der Dateizugriffsmodus ‘r’. Ich habe die anderen Zugriffsmodi unten erwähnt:

  • ‘w’ – in eine Datei schreiben
  • ‘r+’ oder ‘w+’ – lesen und in eine Datei schreiben
  • ‘a’ – an eine bereits vorhandene Datei anhängen
  • ‘a+’ – nach dem Lesen an eine Datei anhängen

Python bietet uns drei Funktionen, um Daten aus einer Textdatei zu lesen:

  1. lesen (n) – Diese Funktion liest n Bytes aus den Textdateien oder liest die vollständigen Informationen aus der Datei, wenn keine Zahl angegeben ist. Es ist schlau genug, mit den Trennzeichen umzugehen, wenn es auf eines trifft und die Sätze trennt
  2. Lesezeile(n) – Mit dieser Funktion können Sie n Bytes aus der Datei lesen, jedoch nicht mehr als eine Informationszeile
  3. Lesezeilen() – Diese Funktion liest die vollständigen Informationen in der Datei, aber anders als lesen(), es kümmert sich nicht um das Trennzeichen und druckt es auch in einem Listenformat aus

Sehen wir uns an, wie sich diese Funktionen beim Lesen einer Textdatei unterscheiden:

Das lesen() Funktion importiert alle Daten in der Datei in der korrekten strukturierten Form.

Durch Angabe einer Nummer im in lesen() Funktion konnten wir die angegebene Menge an Bytes aus der Datei extrahieren.

Verwenden von Zeile lesen(), nur eine einzelne Zeile aus der Textdatei wurde extrahiert.


Haftungsausschluss: Ich kenne mich mit openpyxl nicht aus. Ich hoffe, diese Rezension ist kein Unsinn. Sag es mir!

Der bereitgestellte Code kopiert den Inhalt des ersten Blatts in data , schreibt invertierten (transponierten?) Inhalt in ein neues Blatt tmp_sheet , kopiert Attribute des Originalblatts nach tmp_sheet und löscht schließlich das Originalblatt.

Was ich nicht bekomme, ist, warum nicht das Originalblatt direkt aktualisieren? Sie könnten die Koordinaten der Zellen unterhalb der Diagonale des Blattes durchschleifen, die Koordinaten der zu tauschenden Zelle berechnen, einen geeigneten Zwischenspeicher verwenden, um einzelne Werte auszutauschen. Die Diagonalen können in Ruhe gelassen werden, sie müssen mit nichts getauscht werden.

Dieser Ansatz hätte den Vorteil, dass bei mehreren Blättern in der Datei der Inhalt des ersten Blatts auf dem ersten Blatt verbleibt und Sie sich nicht um das Kopieren von Blatteigenschaften wie dem Titel kümmern müssen.


Laden Sie mehrere Arbeitsblätter aus einer Excel-Datei in mehrere DataFrames

Die Tabelle finden Sie direkt über dem Abschnitt "Referenzen" unter diesem Link.

Es ist eine Veröffentlichung für STR-DNA-Lokusfrequenzen, um Übereinstimmungswahrscheinlichkeiten zu berechnen. Ich würde gerne einen Match-Wahrscheinlichkeitsrechner erstellen und ihn so skalieren, dass er Hunderttausende von Berechnungen anstelle von nur einer durchführen kann. Der erste Schritt ist das Laden der Frequenzen in den Speicher und ist Gegenstand dieses Codes. Ich dachte, ein Dataframe für jeden Populationssatz wäre in Ordnung.

Die erste Reihe in jedem Arbeitsblatt ist nur eine Bevölkerungsbezeichnung. Es kann ignoriert werden.

Die zweite Zeile ist die Überschrift: Die erste Spalte "Allele" ist der STR-Allelaufruf. Dies wird für die Übereinstimmung verglichen. Dies ist normalerweise eine ganze Zahl, kann aber manchmal eine Dezimalzahl von .1, .2 oder .3 haben. Manchmal handelt es sich um eine Zeichenfolge mit einem Größer-als- oder Kleiner-als-Symbol (z. B. "<9.2", ">17"), obwohl ich nicht weiß, ob in der Excel-Datei welche vorhanden sind.

Die 2. bis 25. Spalte sind die verschiedenen getesteten Stellen. Jeder ist unabhängig.

Ich ignoriere alles nach der 25. Spalte und alles nach der letzten Reihe von Frequenzen. Die meisten Datenpunkte innerhalb dieser Grenzen sind leer. Sie werden mit der sogenannten minimalen Allelfrequenz gefüllt. Wenn Sie an weiteren Informationen interessiert sind, würde ich mich freuen, mich zu unterhalten, aber es ist wahrscheinlich nicht relevant für die vorliegende Diskussion.

Ich bin sicher, es gibt einen eleganteren Weg, dies zu tun, und wahrscheinlich einen schnelleren Weg. Deshalb bin ich hier. Wenn es eine bessere Struktur gibt, um dies einzubauen, oder eine schnellere / elegantere Möglichkeit, dies zu tun, lassen Sie es mich bitte wissen. Dies ist mein erster Versuch. Die Frames benötigen etwa 3 Sekunden, um alle Daten zu laden. Ich denke, es sollte viel schneller gehen. Hier ist jedenfalls mein Code.


Inhalte von Word-Tabellen in eine Tabellenkalkulation schreiben

Dieses Drehbuch habe ich letztes Jahr für einen ehemaligen Kollegen geschrieben. Sie hatte ein Word-Dokument mit etwa 600 Tabellen erhalten, die irgendwo aus einer Datenbank gedumpt worden sein mussten. Die Tabellen hatten die gleiche Überschrift und jede Tabelle repräsentierte einen “Vorfall” mit Datumsangaben, Details usw.

Sie wurde aufgefordert, “ in Excel einzugeben”. Nachdem sie die erste Tabelle manuell in passende Spalten einer Tabelle kopiert hatte, kam sie zu mir. Diese Art von Dingen ist normalerweise eine Aufgabe, die wir einem Studenten stellen würden, da sie nichts mit GIS zu tun hat. Als ich die sich wiederholende Struktur sah, war ich mir jedoch sicher, dass mir etwas einfallen könnte, um dies automatisch zu tun.

docx importieren
xlwt importieren
doc = r"C:SomeArbFolderinput.docx"
xls = r"C:SomeArbFolderoutput.xls"
Dokument = docx . Dokument (Dokument)
Buch = xlwt . Arbeitsmappe ()
cur_sheet = Buch . add_sheet ( "Tables" )
row_num = 0
Tabellen = Dokument . Tabellen # Holen Sie sich alle Tabellen in der docx
# Holen Sie sich die Kopfzeile aus der ersten Zeile der 1. Tabelle
für index , Zelle in Aufzählung ( Tabellen [ 0 ] Zeilen [ 0 ] Zellen ):
cur_sheet . schreiben (row_num, index, cell.text)
für Tabelle in Tabellen :
für Zeile in der Tabelle. rows [ 1 :]: # Überspringe die sich wiederholende Kopfzeile jeder Tabelle
row_num += 1
für Index, Zelle in Aufzählung (Zeile. Zellen):
if Zelle != '' :
cur_sheet . schreiben ( row_num , index , cell . text . strip ())
Buchen . speichern (xls)

Das Skript findet alle Tabellen im Dokument und übernimmt die Kopfzeile der ersten Tabelle, um als Überschriften in der Tabelle zu dienen. Anschließend durchläuft es alle Tabellen, überspringt die Kopfzeile und füllt die Tabelle mit allen Zeilen aus den verschiedenen Tabellen.

Das Schreiben dauerte ungefähr 15 Minuten (muss mit dem korrekten Zugriff auf die Tabellenelemente herumspielen) und weniger als eine Minute, um die Daten zu extrahieren. Das ist die Zeit, die es gedauert hätte, 5 der Tabellen manuell zu kopieren. Bei diesem Tempo hätte es ungefähr 4 Tage gedauert, um den Vorgang abzuschließen.


Libexcel-writer-xlsx-perl

Mit dem Modul Excel::Writer::XLSX kann eine Excel-Datei im XLSX-Format 2007+ erstellt werden.

Einer Arbeitsmappe können mehrere Arbeitsblätter hinzugefügt werden und Zellen können formatiert werden. In die Zellen können Text, Zahlen und Formeln geschrieben werden.

Excel::Writer::XLSX verwendet dieselbe Schnittstelle wie das Spreadsheet::WriteExcel-Modul, das eine Excel-Datei im binären XLS-Format erzeugt.

Excel::Writer::XLSX unterstützt alle Funktionen von Spreadsheet::WriteExcel und bietet in einigen Fällen mehr Funktionen. Weitere Informationen finden Sie unter Kompatibilität mit Spreadsheet::WriteExcel.

Der Hauptvorteil des XLSX-Formats gegenüber dem XLS-Format besteht darin, dass es eine größere Anzahl von Zeilen und Spalten in einem Arbeitsblatt ermöglicht.

Das XLSX-Dateiformat erzeugt auch viel kleinere Dateien als das XLS-Dateiformat.


Ein Gedanke zu &ldquo Umgekehrte Geocodierung von Tabellenkoordinaten mit Geocoder und Pandas &rdquo

Toller Beitrag, wusste nichts über Geocoder! Ziehen Sie auch in Betracht, das geopy Python-Paket zu verwenden, das meiner Meinung nach heutzutage eine der beliebtesten Alternativen für die Geokodierung ist.

Hinterlasse eine Antwort Antwort verwerfen

Diese Seite verwendet Akismet, um Spam zu reduzieren. Erfahren Sie, wie Ihre Kommentardaten verarbeitet werden.

Ich bin Cindy und dies ist mein Blog über Geoinformatik (GIS/Datenbanken/Geographie), Programmierung und lebenslanges Lernen.


So importieren Sie Excel/Tabellenkalkulation in eine vorhandene Sharepoint-Liste mit Javascript

Ich möchte einige Daten einer Excel-Tabelle in eine vorhandene Liste importieren. Ich sehe, dass dies mit Power Shell oder mit C# erfolgen kann.

Kann mir jemand helfen, dies mit JavaScript zu tun, indem er ein Webpart hinzufügt. um eine Schaltfläche zu haben, die es uns durch Anklicken ermöglichen sollte, eine Excel-Tabelle hochzuladen, wenn wir die richtige Tabelle ausgewählt haben, sollten die erforderlichen Spalten aus der Tabelle genommen und zur Liste hinzugefügt werden, wenn sich etwas an den alten geändert hat, dann wird sie aktualisiert.

Bitte helfen Sie mir, eine Lösung für dieses Problem zu finden.


Schau das Video: Python Basics - 16 part 1 - Dictionary + Three Looping Techniques