Layer (A).shp). Ich habe eine Antwort von diesem Beitrag auf der erhalten" /> Layer (A).shp). Ich habe eine Antwort von diesem Beitrag auf der erhalten" />
Mehr

Ausgabedatei kann nicht mit eigenständigem Skript für QGIS umbenannt werden


Ich möchte alle Ausgabedateien umbenennen, nachdem mein Skript die Verarbeitung abgeschlossen hat, indem ich "(A)" nach ihrem Dateinamen hinzufüge (zB Layer.shp -> Layer (EIN).shp). Ich habe von diesem Beitrag eine Antwort zu den Befehlen erhalten, die zum Umbenennen von Dateien erforderlich sind. Ich habe dies am Ende des Skripts eingefügt, aber beim Ausführen des Skripts erhalte ich die folgende Meldung:

WindowsError: [Error 32] Der Prozess kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird: 'Layer.dbf'

Ich dachte, ich hätte die mit QGIS verbundenen Prozesse geschlossen, aber es scheint nicht so zu sein. Das Folgende ist ein Ausschnitt:

import os, sys, glob, Shutil from qgis.core import * from qgis.gui import QgsMapCanvas from PyQt4.QtGui import * from os.path import expanduser home = expanduser("~") # Ordnerpfad der Ergebnisse für Shapefiles path_dir = home + "DesktopTest" path_res = path_dir + "Results" Cellsize = 200 layerPath = path_dir + "Layer.shp" extension = QgsVectorLayer( layerPath,", 'ogr' ).extent() centerx = ( Extent.xMinimum() + Extent.xMaximum()) / 2 centery = (Extent.yMinimum() + Extent.yMaximum()) / 2 width = Extent.xMaximum() - Extent.xMinimum() height = Extent.yMaximum( ) - extension.yMinimum() def run(): output_0=general.runalg("qgis:creategrid", Cellsize, Cellsize, width, height, centerx, centery, 1, 'EPSG:7405', None) # Set directory and Suche nach allen Polygon-Shapefiles os.chdir(path_dir + "Polygon Shapefile") für fname in glob.glob("*.shp"): # Clip .shp-Dateien im Verzeichnis in Grid und speichere Dateien im Ergebnisordner output_1=general .runalg("qgis:clip", output_0['SAVENAME'], fname, path_res + "/" + fname) # Pfade der Shapefiles im Ergebnisordner mit Listenverständnisausgabe = [shp für shp in glob.glob(path_res + "*.shp")] run() QgsApplication.exitQgis() app.exit( ) os.chdir(path_res) für fname in glob.glob("*.*"): name,ex = fname.rsplit(".",1) Shutil.move(fname,os.path.join(path_res," {}{}{}".format(name," (A).",ex)))

Haben Sie versucht, "(A)" hinzuzufügen, bevor Sie den Ausgabeparameter an den Algorithmus übergeben? Sie müssten der for-Schleife im . 3 Zeilen hinzufügenLauf()Methode:

für fname in glob.glob("*.shp"): pieces = list(os.path.splitext(fname)) pieces.insert(1,"(A)") nameWithA = "".join(pieces) output_1= general.runalg("qgis:clip", output_0['SAVENAME'], fname, path_res + "/" + nameWithA)

Wie öffne ich eine geschlossene Linie in QGIS?

Genauer gesagt, wie würde ich eine Verbindung zwischen zwei Knoten in QGIS löschen?

Ich habe eine geschlossene Linie, bei der ich eine Verbindung zwischen zwei verschiedenen Knoten löschen möchte, indem ich die Linie von einer geschlossenen Linie in eine offene Linie umwandele. Es ist kein Polygon oder so, dies ist nur eine Linienebene.

Ist es ein Netzwerk? Wenn nein, verwenden Sie das Scheitelpunktwerkzeug, um den Endknoten neu zu positionieren. Es gibt keine Beziehung zwischen Knoten und Linien, es sei denn, es handelt sich um ein Netzwerk. Zumindest keine die mir bekannt sind. Vielleicht hängt es von Ihrem Datenformat ab. Ich bin immer bereit, etwas Neues zu lernen.

Danke für die schnelle Antwort!

Nein, es ist nur eine Linie innerhalb einer typischen Linienebene (der Typ, den Sie erhalten, wenn Sie "Polygons to Lines" unter Geometrie-Tools verwenden). Es hat keinen Endpunkt, weil ich es von einem Polygon konvertiert habe.

Wenn nein, verwenden Sie das Scheitelpunktwerkzeug, um den Endknoten neu zu positionieren.

Tut mir leid, ich bin mir nicht sicher, was Sie damit meinen. Dies ist ein Bild von dem, womit ich arbeite. Sie können das Feature mit roten Kreuzen sehen und zwischen dem ersten roten Kreuz auf der linken Seite und dem letzten roten Kreuz auf der rechten Seite ist dort eine gelbe Linie gezeichnet. Wenn ich versuche, das Vertex-Werkzeug zu verwenden, um es zu verschieben, werden beide Knoten am Ende der Linie verwendet.

UPDATE: Ich habe eine Lösung gefunden, ich habe einfach die Linie geteilt und die Endknoten gelöscht, dann die restlichen Linien wieder zusammengefügt. Ich würde gerne in Zukunft wissen, ob es eine schnellere Möglichkeit gibt, dies im Vertex-Tool zu tun.


QGIS 3.10.6 friert ein und verzögert sich stark

Hallo. In den letzten zwei bis drei Monaten fing QGIS in letzter Zeit stark an einzufrieren. Es passiert normalerweise 3-5 Sekunden, nachdem ich eine Ebene öffne, die Beschriftungen ändere oder irgendetwas anderes. Das ist mir noch nie passiert und hat mich jetzt wirklich genervt. Hat noch jemand ähnliche Probleme mit der neuesten Version? Ich bin mir ziemlich sicher, dass dies kein Hardwareproblem ist. Mein aktuelles Projekt hat viele Ebenen, aber nur wenige davon sind gleichzeitig aktiv. Allerdings war dies auch noch nie ein Thema.

Vielen Dank! Ich werde es versuchen 2. Es könnte auch 3 sein, obwohl ich nur Daten von meinen lokalen Laufwerken verwende.

3.10.7 LTR und 3.14.0 sind raus, hast du die ausprobiert?

Nein. Habe 3.14 nicht heruntergeladen, weil es kein LTR war. Ich werde das versuchen. Vielen Dank.

Ich habe die neueste LTR nicht überprüft, aber die eine Funktion, die mir beim Wechsel von QGIS von ArcMap nicht gefallen hat, wurde in 3.14 - angedockte & Registerkarten-Attributtabelle korrigiert. Es wird so viel Zeit sparen, obwohl es so klein ist.

Ich hatte frühere Versionen, die gut liefen, aber sehr schnell stecken blieben, wenn ich alle meine Daten darauf warf oder remote gehostet wurde. Wie andere gepostet haben, viele Variablen, also schau dir ihre Liste an.

Nein, es ist nicht nur du. Ich habe ähnliche Probleme und konnte sie noch nicht beheben. Das Problem ist eine sehr verzögerte Reaktionsfähigkeit der gesamten QGIS-Schnittstelle. Immer wenn ich zwischen einem Panel wechsle, habe ich eine harte Verzögerung von 5-10 Sekunden, einschließlich vieler Einfrieren und Stottern beim Start.
Habe die letzten 3 Versionen probiert und alle haben das gleiche Problem. Es läuft perfekt auf demselben Computer unter Ubuntu. (Xeon X5650 4GHz, 16GB RAM, Radeon r9 280x)

Ich habe sogar eine Neuinstallation von Windows 10 (Pro 64 Bit) versucht, um das Problem zu lösen. Das erste, was ich nach den Treibern installiert habe, war QGIS und immer noch die gleichen Verzögerungen und Einfrieren.

Ich bin mir ziemlich sicher, dass dies ein Problem mit Windows 10 ist und ich habe keine Ahnung, was ich dagegen tun soll.


8 Antworten 8

Dies funktioniert nicht, da iconv zuerst die Ausgabedatei erstellt (da die Datei bereits vorhanden ist, wird sie abgeschnitten) und dann mit dem Lesen der Eingabedatei (die jetzt leer ist) beginnt. Die meisten Programme verhalten sich so.

Erstellen Sie eine neue temporäre Datei für die Ausgabe und verschieben Sie sie dann an ihren Platz.

Wenn das iconv Ihrer Plattform nicht über -o verfügt, können Sie eine Shell-Umleitung mit dem gleichen Effekt verwenden.

Diese Antwort gilt nicht nur für iconv, sondern für jedes Filterprogramm. Einige Sonderfälle sind erwähnenswert:


4 Antworten 4

Mit GNU sed können Sie (auch ohne Erweiterung):

Die erste Regex wird übereinstimmen

  • 'hs/(.*)(.[^.]*$)/2/taz:axs//1/' füge die Erweiterung in den Haltebereich ein (sofern vorhanden). Den Rest im Musterraum lassen.
  • 's/([0-9]<1,>)/ 0001 /g' Platziere jeden Zahlenstrom in separaten Zeilen und stelle ihnen 3 Nullen voran.

Nachdem jede zu ändernde Zahl um führende Nullen erweitert wurde und sich in einer eigenen Zeile befindet, tun Sie Folgendes:

  • 's/ [0-9]*([0-9]<3>) /1/g' Extrahiere die letzten 3 Ziffern aus jeder Ziffernzeile.
  • 'Gs/ //' fügt die beim Start erfasste Erweiterung erneut an.

Um Dateien umzubenennen (Dateinamen sollten keine Zeilenumbrüche enthalten und die Erweiterung sollte einem Punkt folgen):

Entfernen Sie das Echo, nachdem Sie mit dem Skript zufrieden sind, um die Dateien tatsächlich zu ändern.

Sie können perl-rename verwenden (das mit sudo apt install rename auf Debian-basierten Systemen installierbar sein sollte). Verwenden Sie diese Dateien als Eingabe:

Dadurch werden sie umbenannt in:

Beachten Sie, wie die 100 unverändert gelassen wurde und der Rest aufgefüllt wurde. Beachten Sie auch, dass die 4 in .m4a und mp4 nicht betroffen waren.

WICHTIG: Führen Sie zuerst den Befehl mit -n aus, um zu sehen, was passiert, bevor Sie die Dateien tatsächlich umbenennen:

Der reguläre Ausdruck sucht nach Dehnungen einer oder mehrerer Ziffern ( d+ ), die vor mindestens einer stehen. ( ?=.*. ). Dies soll verhindern, dass eine in der Nebenstelle gefundene Nummer geändert wird. Dies funktioniert jedoch nicht, wenn Ihre Dateinamen keine Erweiterung haben. Wenn Sie solche Dateien haben, verwenden Sie stattdessen dies, um einfach alle Zahlen aufzufüllen:

s/old/new/ ist der Substitutionsoperator, der old durch new ersetzt. Da (d+) hier in Klammern steht, ist alles, was gefunden wird, gefangen und steht dann als $1 auf der rechten Seite der Substitution zur Verfügung. Wir ersetzen daher die Ziffern mit sich selbst 0 aufgefüllt ( sprintf("%03d", $number) gibt $number aufgefüllt mit 0s aus, bis seine Länge 3 ist. Schließlich ermöglicht uns das Flag e die Verwendung von Ausdrücken (hier sprintf ) und g macht die Ersetzung global für alle Übereinstimmungen in der Eingabezeile (Dateiname).

Beachten Sie, dass eine Zahl, die bereits mit mehr als 3 0 aufgefüllt ist, auf 3-0 aufgefüllt wird. Aus der Datei 00000001.mp3 wird die Datei 001.mp3.


Ich rastere Polygon-SHP-Dateien in TIFF-Bilder, aber es gibt Streifen von zufälligem Rauschen. Ich habe genau diesen Vorgang zuvor ohne Probleme durchgeführt. Weiß jemand warum das passiert?

Ich begann mit einer Linienkonturdatei und konvertierte jede Höhe in Polygone, wobei ich jede als eine andere Ebene speicherte.

Ich habe dann Rasterize (Vektor zu Raster) verwendet, um als Bild zu exportieren, und den Vorgang mit einem Stapelprozess abgeschlossen.

Ich habe Polygone auf diese Weise schon einmal exportiert (landcover), obwohl die Daten als Polygone heruntergeladen wurden, und ich habe dieses Problem buchstäblich noch nie gesehen.

Die einzige andere Änderung, die ich im Vergleich zu früheren Läufen vorgenommen habe, ist das Rendern mit 50 m/px statt mit 10 m/px. 50 m/px ist die Auflösung, die ich tatsächlich verwende, aber ich habe die Bilder zuvor in Photoshop skaliert.

Ich habe gerade einen Lauf mit 10 m/px abgeschlossen und das Problem ist auch aufgetreten.

Ich habe es jetzt 4 Mal mit 50 m/px ausgeführt, und jedes Mal ist das gleiche passiert. Nicht alle Bilder haben das Rauschen, und der Ort und die spezifischen Schichten, mit denen es passiert, sind jedes Mal anders.

Das Rauschen scheint nie wirklich die gerenderten Bereiche zu durchqueren, aber es wird immer noch mühsam sein, es zu entfernen, da es jedes Mal an einer anderen Stelle erscheint.


Erfassen von Windows-Versionsdaten¶

Eine Windows-App erfordert möglicherweise eine Versionsressourcendatei. Eine Versionsressource enthält eine Gruppe von Datenstrukturen, von denen einige binäre Ganzzahlen und andere Zeichenfolgen enthalten, die die Eigenschaften der ausführbaren Datei beschreiben. Weitere Informationen finden Sie auf der Seite Microsoft-Versionsinformationsstrukturen.

Versionsressourcen sind komplex und einige Elemente sind optional, andere erforderlich. Wenn Sie die Registerkarte Version eines Dialogfelds Eigenschaften anzeigen, gibt es keine einfache Beziehung zwischen den angezeigten Daten und der Struktur der Ressource. Aus diesem Grund enthält PyInstaller den Befehl pyi-grab_version. Es wird mit dem vollständigen Pfadnamen jeder ausführbaren Windows-Datei aufgerufen, die über eine Versionsressource verfügt:

Der Befehl schreibt Text, der eine Versionsressource in lesbarer Form darstellt, in die Standardausgabe. Sie können es aus dem Konsolenfenster kopieren oder in eine Datei umleiten. Anschließend können Sie die Versionsinformationen bearbeiten, um sie an Ihr Programm anzupassen. Mit pyi-grab_version können Sie eine ausführbare Datei finden, die die gewünschten Informationen anzeigt, deren Ressourcendaten kopieren und an Ihr Paket anpassen.

Die Versionstextdatei ist UTF-8 kodiert und kann Nicht-ASCII-Zeichen enthalten. (Unicode-Zeichen sind in Feldern für Versionsressourcenzeichenfolgen zulässig.) Achten Sie darauf, die Textdatei in UTF-8 zu bearbeiten und zu speichern, es sei denn, Sie sind sicher, dass sie nur ASCII-Zeichenfolgenwerte enthält.

Ihre bearbeitete Versionstextdatei kann mit der Option --version-file= an pyinstaller oder pyi-makespec übergeben werden. Die Textdaten werden in eine Versionsressource konvertiert und in der gebündelten App installiert.

In einer Versionsressource gibt es zwei 64-Bit-Binärwerte, FileVersion und ProductVersion . In der Versionstextdatei werden diese als Tupel mit vier Elementen angegeben, zum Beispiel:

Die Elemente jedes Tupels repräsentieren 16-Bit-Werte von höchstwertig bis niedrigstwertig. Zum Beispiel wird der Wert (2, 0, 4, 0) zu 0002000000040000 in Hex aufgelöst.

Sie können eine Versionsressource auch aus einer Textdatei installieren, nachdem die gebündelte App erstellt wurde, indem Sie den Befehl pyi-set_version verwenden:

pyi-set_version version_text_file ausführbare Datei

Das Dienstprogramm pyi-set_version liest eine Versionstextdatei, wie sie von pyi-grab_version geschrieben wurde, konvertiert sie in eine Versionsressource und installiert diese Ressource im ausführbare Datei spezifizierten.

Untersuchen Sie für fortgeschrittene Anwendungen eine Versionstextdatei, wie sie von pyi-grab_version geschrieben wurde. Sie finden, es ist Python-Code, der ein VSVersionInfo-Objekt erstellt. Die Klassendefinition für VSVersionInfo befindet sich in utils/win32/versioninfo.py im PyInstaller-Distributionsordner. Sie können ein Programm schreiben, das versioninfo importiert. In diesem Programm können Sie den Inhalt einer Versionsinfo-Textdatei auswerten, um ein VSVersionInfo-Objekt zu erzeugen. Sie können die Methode .toRaw() dieses Objekts verwenden, um eine Versionsressource in binärer Form zu erzeugen. Oder Sie können die Funktion unicode() auf das Objekt anwenden, um die Versionstextdatei zu reproduzieren.


Dies ist wahrscheinlich die einfachste und plattformübergreifend. Es verwendet nur die Standardkonfiguration von Arara - es müssen keine zusätzlichen Skripte oder Regeln hinzugefügt werden.

Der folgende Code erzeugt großartig-name.pdf unabhängig vom Namen der .tex-Datei selbst:

wobei <filename>.tex der Name Ihrer .tex-Datei ist. Arara führt dann pdflatex --jobname great-name <filename>.tex aus und erzeugt great-name.pdf .

Beachten Sie bei dieser Methode, dass auch Hilfsdateien den angegebenen Namen verwenden. Sie haben also großartig-name.aux und großartig-name.log - nicht <filename>.aux oder <filename>.log . Dies kann natürlich ein Vorteil sein, aber es kann auch ein Nachteil sein und sollte daher beachtet werden.


3 Antworten 3

Ich habe gerade Ihren Code bekommen, um an meinem Ende zu arbeiten.

  1. Weisen Sie dem Benutzer, den Sie in SQL Server Management Studio zum Ausführen der Abfrage verwenden, die NTFS-Vollzugriffsberechtigungen zu "C:BCPFilescpFile.dat" zu
  2. Führen Sie Ihre Abfrage in SQL Server Management Studio erneut aus

Oder versuchen Sie es einfach, um den folgenden Fehler zu umgehen:

auf dem Befehlszeilentyp (um eine Dummy-Datei zu erstellen - ja, es werden Importfehler auftreten, aber nur um das Öffnen der Datei zu umgehen.)

Führen Sie Ihre Abfrage in SQL Server Management Studio erneut aus

Wenn Option A funktioniert, handelt es sich um ein Berechtigungsproblem. Wenn Option B funktioniert (den ursprünglichen Fehler umgehen), haben Sie eine geöffnete Datei - obwohl sie nicht geöffnet zu sein scheint. Es gibt Dienstprogramme, die beim Auffinden dieser geöffneten Dateien helfen, aber eine billige und einfache Möglichkeit zum Testen besteht darin, den Server neu zu starten - hoffentlich handelt es sich um eine Entwickler-/Testbox.


Viele GNU-Tools wie cp , mv und tar unterstützen das Erstellen von Backup-Dateien, wenn das Ziel existiert. Das heißt, wenn Sie foo nach bar kopieren, wenn bereits eine Datei namens bar vorhanden ist, wird die vorhandenen bar wird umbenannt und enthält nach dem Kopieren den Inhalt von foo . Standardmäßig wird bar in bar umbenannt

, aber das Verhalten kann geändert werden:

Es gibt andere Varianten, wie zum Beispiel das Erstellen von nummerierten Backups nur dann, wenn bereits eines vorhanden ist. Weitere Informationen finden Sie im coreutils-Handbuch.

um mögliche Kandidaten zu finden, und mcopy tauchte auf.

zeigt eine vielversprechende Option -D Clash-Option ist das nicht cool? Aber nicht so cool - es wird nicht beschrieben. Aber es gibt einige Hinweise zu mtools.dvi, die ich auf meinem System ohne Erfolg und über Google ohne Erfolg gesucht habe, aber dann habe ich mit Google direkt nach mcopy clash-option gesucht und diese Seite gefunden.

zu Tests für Autorename und Targetdir a - anstatt Autorenaming hat es mich gebeten, jede Datei zu ignorieren oder zu überschreiben, das dumme s. .

Meine Version ist mtools-4.0.10 und die Hilfeseite ist von 1996 - 15 Jahre alt. Sollten wir in der Zwischenzeit wirklich einige Funktionen verlieren?

Ich würde die Arbeit in zwei Schritte aufteilen:

  • Erstellen Sie eine kurze Funktion, die einen eindeutigen Namen für eine Datei generiert, wenn dieser Name belegt ist.
  • Führen Sie find aus und führen Sie dieses Skript für jede Datei aus, die Sie kopieren möchten.

Sollen wir diesen Ansatz unterstützen? :)

Hier ist ein Skript, um Dateien automatisch umzubenennen:

und das ist mein Testaufruf:

Hinweis: -maxdepth, -name und -type wurden verwendet, um die Anzahl der betroffenen Dateien drastisch einzuschränken. Ich habe das Skript weder auf tiefere Dateistrukturen getestet, noch auf Leerzeichen in Dateinamen und andere, unkonventionelle Zeichen wie Zeilenvorschub, Seitenvorschub und so weiter.

Ich habe .1 verwendet, weil es bei den meisten Befehlen keine Probleme macht, während a ( und a ) oft maskiert werden müssen.


Schau das Video: QGIS using Python Programming for Beginners (Oktober 2021).