Layer (A).shp). J'ai reçu une réponse de ce post sur le" /> Layer (A).shp). J'ai reçu une réponse de ce post sur le" />
Suite

Impossible de renommer le fichier de sortie à l'aide d'un script autonome pour QGIS


Je voudrais renommer tous les fichiers de sortie une fois que mon script a fini de les traiter en ajoutant "(A)" après leur nom de fichier (par exemple Layer.shp -> Layer (UNE).shp). J'ai reçu une réponse de ce post sur les commandes nécessaires pour renommer les fichiers. Je mets ceci à la fin du script mais je reçois le message suivant lors de l'exécution du script :

Erreur Windows : [Erreur 32] Le processus ne peut pas accéder au fichier car il est utilisé par un autre processus : 'Layer.dbf'

Je pensais avoir fermé les processus associés associés à QGIS mais il semble que non. Ce qui suit est un extrait :

import os, sys, glob, shutdown depuis qgis.core import * depuis qgis.gui import QgsMapCanvas depuis PyQt4.QtGui import * depuis os.path import expanduser home = expanduser("~") # Chemin du dossier des résultats pour les fichiers de formes path_dir = home + "DesktopTest" path_res = path_dir + "Results" Cellsize = 200 layerPath = path_dir + "Layer.shp" extent = QgsVectorLayer( layerPath,", 'ogr' ).extent() centerx = ( extent.xMinimum() +extent.xMaximum()) / 2 centery = (extent.yMinimum() +extent.yMaximum()) / 2 width =extent.xMaximum() -extent.xMinimum() height =extent.yMaximum( ) - extend.yMinimum() def run(): output_0=general.runalg("qgis:creategrid", Cellsize, Cellsize, width, height, centerx, centery, 1, 'EPSG:7405', None) # Définir le répertoire et recherchez tous les fichiers de formes de polygones os.chdir(path_dir + "Polygon Shapefile") pour fname dans glob.glob("*.shp") : # Clipsez les fichiers .shp du répertoire dans Grid et enregistrez les fichiers dans le dossier Result output_1=general .runalg("qgis:clip", output_0['SAVENAME'], fname, path_res + "/" + fname) # Chemins des fichiers de formes dans le dossier Result avec la sortie de compréhension de liste = [shp pour shp dans glob.glob(path_res + "*.shp")] run() QgsApplication.exitQgis() app.exit( ) os.chdir(path_res) pour fname dans glob.glob("*.*") : name,ex = fname.rsplit(".",1) shutil.move(fname,os.path.join(path_res," {}{}{}".format(nom," (A).",ex)))

Avez-vous essayé d'ajouter le "(A)" avant de passer le paramètre de sortie à l'algorithme ? Vous auriez besoin d'ajouter 3 lignes à la boucle for dans leCours()méthode:

pour fname dans 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)

Comment ouvrir une ligne fermée dans QGIS ?

Plus précisément, comment supprimer une connexion entre deux nœuds dans QGIS ?

J'ai une ligne fermée où je veux supprimer une connexion entre deux nœuds différents, transformant la ligne d'une ligne fermée en une ligne ouverte. Ce n'est pas un polygone ou quoi que ce soit, c'est juste une couche de lignes.

Est-ce un réseau ? Si non, vous utilisez l'outil sommet pour repositionner le nœud d'extrémité. Il n'y a pas de relation entre les nœuds et les lignes à moins qu'il ne s'agisse d'un réseau. Du moins aucun à ma connaissance. Cela dépend peut-être de votre format de données. Je suis toujours prêt à apprendre quelque chose de nouveau.

Merci pour la réponse rapide!

Non, il ne s'agit que d'une ligne à l'intérieur d'un calque de ligne typique (le type que vous obtenez lorsque vous utilisez "Polygones en lignes" sous Outils de géométrie). Il n'a pas de point final car je l'ai converti d'un polygone.

Si non, vous utilisez l'outil sommet pour repositionner le nœud d'extrémité.

Désolé, je ne sais pas ce que vous entendez par là. C'est une image de ce avec quoi je travaille. Vous pouvez voir la caractéristique avec des croix rouges et entre la première croix rouge sur le côté gauche et la dernière croix rouge sur le côté droit, il y a une ligne jaune tracée là-bas. Si j'essaie d'utiliser l'outil vertex pour le déplacer, il prend les deux nœuds à la fin de la ligne.

MISE À JOUR : j'ai trouvé une solution, je viens de diviser la ligne et de supprimer les nœuds de fin, puis de rejoindre les lignes restantes. J'aimerais savoir à l'avenir s'il existe un moyen plus rapide de le faire dans l'outil vertex.


QGIS 3.10.6 se fige et prend beaucoup de retard

Salut. Au cours des deux ou trois derniers mois, QGIS a commencé à geler beaucoup ces derniers temps. Cela se produit généralement pendant 3 à 5 secondes après que j'ai ouvert un calque, changé les étiquettes ou quoi que ce soit de vraiment. Cela n'était jamais arrivé auparavant et commençait vraiment à me déranger maintenant. Quelqu'un d'autre a-t-il des problèmes similaires avec la dernière version ? Je suis presque sûr que ce n'est pas un problème dû au matériel. Mon projet actuel a beaucoup de calques, mais seuls quelques-uns d'entre eux sont actifs en même temps. Cependant, cela n'a jamais été un problème auparavant.

Merci! Je vais essayer 2. Cela pourrait aussi être 3, bien que je n'utilise que les données de mes lecteurs locaux.

3.10.7 LTR et 3.14.0 sont sortis, les avez-vous essayés ?

Non. Je n'ai pas téléchargé 3.14 car ce n'était pas un LTR. Je vais essayer ça. Merci.

Haven't vérifié la dernière LTR, mais la seule fonctionnalité que je n'aimais vraiment pas à propos du déplacement de QGIS à partir d'ArcMap a été corrigée dans 3.14 - la table attributaire ancrée et à onglets. Cela va faire gagner tellement de temps même si c'est une si petite chose.

Les versions précédentes fonctionnaient bien, mais je me suis enlisé très rapidement lorsque j'y ai jeté toutes mes données ou que j'étais hébergé à distance. Comme d'autres ont posté, de nombreuses variables, alors consultez leur liste.

Non, il n'y a pas que toi. J'ai des problèmes similaires et je n'ai pas encore pu le résoudre. Le problème est une réactivité très lente de l'ensemble de l'interface QGIS. Chaque fois que je bascule entre un panneau, j'ai un décalage important de 5 à 10 secondes, y compris beaucoup de gels et de bégaiement au démarrage.
J'ai essayé les 3 dernières versions et toutes ont le même problème. Il fonctionne parfaitement sur la même machine sous Ubuntu. (Xeon X5650 4 GHz, 16 Go de RAM, Radeon r9 280x)

J'ai même essayé une nouvelle installation de Windows 10 (Pro 64 Bit) pour résoudre le problème. La première chose que j'ai installée après les pilotes était QGIS et toujours les mêmes décalages et blocages.

Je suis tout à fait sûr qu'il s'agit d'un problème avec Windows 10 et je ne sais pas quoi faire à ce sujet.


8 réponses 8

Cela ne fonctionne pas car iconv crée d'abord le fichier de sortie (puisque le fichier existe déjà, il le tronque), puis commence à lire son fichier d'entrée (qui est maintenant vide). La plupart des programmes se comportent de cette façon.

Créez un nouveau fichier temporaire pour la sortie, puis placez-le en place.

Si l'iconv de votre plate-forme n'a pas -o , vous pouvez utiliser une redirection shell pour le même effet.

Cette réponse s'applique non seulement à iconv mais à tout programme de filtrage. Quelques cas particuliers méritent d'être mentionnés :


4 réponses 4

Avec GNU sed, vous pouvez faire (même sans extension) :

La première regex correspondra

  • 'hs/(.*)(.[^.]*$)/2/taz:axs//1/' place l'extension dans l'espace réservé (s'il y en avait un). Laissez le reste dans l'espace du motif.
  • 's/([0-9]<1,>)/ 0001 /g' Placez chaque flux de nombres sur des lignes séparées en les préparant de 3 zéros.

Une fois que chaque nombre à modifier a été étendu pour avoir des zéros non significatifs et se trouver dans sa propre ligne, procédez comme suit :

  • 's/ [0-9]*([0-9]<3>) /1/g' Extraire les 3 derniers chiffres de chaque ligne de chiffres.
  • 'Gs/ //' rattachez l'extension capturée au début.

Donc, pour renommer les fichiers (les noms de fichiers ne doivent pas contenir de nouvelles lignes et l'extension doit suivre un point) :

Supprimez l'écho une fois que vous êtes satisfait du script pour modifier réellement les fichiers.

Vous pouvez utiliser perl-rename (qui devrait pouvoir être installé avec sudo apt install rename sur les systèmes basés sur Debian). En utilisant ces fichiers en entrée :

Ce qui les renommera en :

Notez comment le 100 est resté inchangé et le reste a été rembourré. Notez également que les 4 en .m4a et mp4 n'ont pas été affectés.

IMPORTANT: exécutez d'abord la commande avec -n pour voir ce qui se passera avant de renommer réellement les fichiers :

L'expression régulière recherche les étirements d'un ou plusieurs chiffres ( d+ ) qui précèdent au moins un . ( ?=.*. ). Ceci afin d'éviter de modifier un numéro trouvé dans l'extension. Cependant, cela ne fonctionnera pas si vos noms de fichiers n'ont pas d'extension. Si vous avez des fichiers comme celui-ci, utilisez plutôt ceci pour simplement remplir tous les nombres :

Le s/old/new/ est l'opérateur de substitution qui remplacera old par new . Ici, parce que le (d+) est entre parenthèses, tout ce qui correspond sera capturé et sera ensuite disponible au prix de 1 $ sur le côté droit de la substitution. Nous remplaçons donc les chiffres par eux-mêmes 0 remplis ( sprintf("%03d", $number) affichera $number rempli de 0 jusqu'à ce que sa longueur soit 3). Enfin, le drapeau e permet d'utiliser des expressions (ici, sprintf ) et g rend la substitution globale, pour toutes les correspondances sur la ligne d'entrée (nom de fichier).

Notez que si vous avez un numéro déjà rempli de 0 avec plus de 3 0, cela le réduira à 3-0. Ainsi le fichier 00000001.mp3 deviendra le fichier 001.mp3 .


Je pixellise des fichiers SHP polygonaux en images TIFF, mais il y a des bandes de bruit aléatoire. J'ai déjà fait ce processus exact sans aucun problème. quelquun sait pourquoi cela se passe?

J'ai commencé avec un fichier de contour de ligne et j'ai converti chaque élévation en polygones, en les enregistrant chacun sous un calque différent.

J'ai ensuite utilisé Rasterize (vecteur vers raster) pour exporter en tant qu'image, complétant le processus avec un traitement par lots.

J'ai déjà exporté des polygones de cette manière (couverture du sol), bien que les données aient été téléchargées sous forme de polygones, et je n'ai littéralement jamais vu ce problème auparavant.

Le seul autre changement que j'ai fait par rapport aux passages précédents est le rendu à 50m/px plutôt qu'à 10m/px. 50m/px est la résolution que j'utilise réellement, mais j'ai déjà mis à l'échelle les images dans Photoshop.

Je viens de terminer une course à 10m/px, et le problème est également apparu.

Je l'ai exécuté 4 fois maintenant à 50m/px, et la même chose s'est produite à chaque fois. Toutes les images n'ont pas le bruit, et l'emplacement et les couches spécifiques auxquelles il se produit sont différents à chaque fois.

Le bruit ne semble jamais réellement traverser les zones rendues, mais il sera toujours difficile à supprimer car il apparaît à chaque fois à un endroit différent.


Capture des données de version Windows¶

Une application Windows peut nécessiter un fichier de ressources de version. Une ressource Version contient un groupe de structures de données, certaines contenant des entiers binaires et certaines contenant des chaînes, qui décrivent les propriétés de l'exécutable. Pour plus de détails, consultez la page Structures d'informations sur les versions de Microsoft.

Les ressources de version sont complexes et certains éléments sont facultatifs, d'autres obligatoires. Lorsque vous affichez l'onglet version d'une boîte de dialogue Propriétés, il n'y a pas de relation simple entre les données affichées et la structure de la ressource. Pour cette raison, PyInstaller inclut la commande pyi-grab_version. Il est appelé avec le nom de chemin complet de tout exécutable Windows qui a une ressource Version :

La commande écrit du texte qui représente une ressource Version sous une forme lisible sur la sortie standard. Vous pouvez le copier depuis la fenêtre de la console ou le rediriger vers un fichier. Ensuite, vous pouvez modifier les informations de version pour les adapter à votre programme. En utilisant pyi-grab_version, vous pouvez trouver un exécutable qui affiche le type d'informations que vous souhaitez, copier ses données de ressources et les modifier en fonction de votre package.

Le fichier texte de version est codé en UTF-8 et peut contenir des caractères non ASCII. (Les caractères Unicode sont autorisés dans les champs de chaîne de ressource Version.) Assurez-vous de modifier et d'enregistrer le fichier texte au format UTF-8, sauf si vous êtes certain qu'il contient uniquement des valeurs de chaîne ASCII.

Votre fichier texte de version édité peut être donné avec l'option --version-file= à pyinstaller ou pyi-makespec . Les données de texte sont converties en ressource de version et installées dans l'application fournie.

Dans une ressource Version, il existe deux valeurs binaires 64 bits, FileVersion et ProductVersion . Dans le fichier texte de la version, ceux-ci sont donnés sous forme de tuples à quatre éléments, par exemple :

Les éléments de chaque tuple représentent des valeurs de 16 bits du plus significatif au moins significatif. Par exemple, la valeur (2, 0, 4, 0) se résout en 000200000004000 en hexadécimal.

Vous pouvez également installer une ressource Version à partir d'un fichier texte après la création de l'application groupée, à l'aide de la commande pyi-set_version :

pyi-set_version version_text_file fichier exécutable

L'utilitaire pyi-set_version lit un fichier texte de version tel qu'il est écrit par pyi-grab_version , le convertit en ressource Version et installe cette ressource dans le fichier exécutable spécifié.

Pour les utilisations avancées, examinez un fichier texte de version tel qu'écrit par pyi-grab_version . Vous trouvez que c'est le code Python qui crée un objet VSVersionInfo. La définition de classe pour VSVersionInfo se trouve dans utils/win32/versioninfo.py dans le dossier de distribution PyInstaller. Vous pouvez écrire un programme qui importe les informations de version . Dans ce programme, vous pouvez évaluer le contenu d'un fichier texte d'informations de version pour produire un objet VSVersionInfo. Vous pouvez utiliser la méthode .toRaw() de cet objet pour produire une ressource Version sous forme binaire. Ou vous pouvez appliquer la fonction unicode() à l'objet pour reproduire le fichier texte de la version.


C'est probablement le plus simple et il est multiplateforme. Il utilise simplement la configuration par défaut d'Arara - pas besoin d'ajouter de scripts ou de règles supplémentaires.

Le code suivant produira great-name.pdf quel que soit le nom du fichier .tex lui-même :

où <filename>.tex est le nom de votre fichier .tex. Arara exécute ensuite pdflatex --jobname great-name <filename>.tex et produit great-name.pdf .

Une chose à garder à l'esprit avec cette méthode est que les fichiers auxiliaires utiliseront également le nom spécifié. Vous aurez donc grand-nom.aux et grand-nom.log - ne pas <filename>.aux ou <filename>.log . Cela peut être un avantage, bien sûr, mais cela peut être un inconvénient et mérite donc d'être connu.


3 réponses 3

Je viens de faire fonctionner votre code de mon côté.

  1. Attribuez des autorisations NTFS de contrôle total à 'C:BCPFilescpFile.dat à l'utilisateur que vous utiliserez dans SQL Server Management Studio pour exécuter la requête
  2. Réexécutez votre requête dans SQL Server Management Studio

Ou, juste pour surmonter l'erreur suivante, essayez :

sur le type de ligne de commande (pour créer un fichier factice - oui, il y aura des erreurs d'importation, mais juste pour passer l'ouverture du fichier. )

Réexécutez votre requête dans SQL Server Management Studio

Si l'option A fonctionne, il s'agit d'un problème d'autorisations. Si l'option B fonctionne (en dépassant l'erreur d'origine), vous avez un fichier ouvert, même s'il ne semble pas être ouvert. Il existe des utilitaires qui aident à trouver ces fichiers ouverts, mais un moyen simple et bon marché de tester consiste simplement à redémarrer le serveur - j'espère que c'est une boîte de développement/test.


De nombreux outils GNU tels que cp , mv et tar prennent en charge la création de fichiers de sauvegarde lorsque la cible existe. C'est-à-dire que lors de la copie de foo dans bar , s'il existe déjà un fichier appelé bar , le existant bar sera renommé, et après la copie, la barre contiendra le contenu de foo . Par défaut, la barre est renommée en barre

, mais le comportement peut être modifié :

Il existe d'autres variantes, telles que la création de sauvegardes numérotées uniquement lorsqu'elles existent déjà. Voir le manuel coreutils pour plus de détails.

pour trouver des candidats possibles, et mcopy s'est présenté.

montre une option prometteuse -D clash-option n'est-ce pas cool? Mais pas si cool - ce n'est pas décrit. Mais il y a quelques indices sur mtools.dvi, que j'ai recherché sur mon système, sans succès, et via google, sans succès, mais ensuite, avec google, j'ai cherché directement mcopy clash-option et j'ai trouvé ce site.

aux tests de renommage automatique et de targetdir a - au lieu de renommer automatiquement, il m'a demandé d'ignorer ou de remplacer chaque fichier, ce stupide s. .

Ma version est mtools-4.0.10 et la page d'aide date de 1996 à 15 ans. Doit-on vraiment perdre certaines fonctionnalités, entre-temps ?

Je diviserais le travail en deux étapes :

  • Créez une fonction courte, qui génère un nom unique pour un fichier, si ce nom est occupé.
  • Exécutez find et exécutez ce script pour chaque fichier que vous souhaitez copier.

Allons-nous aider dans cette démarche ? :)

Voici un script, pour renommer automatiquement les fichiers :

et voici mon invocation de test :

Remarque : -maxdepth, -name et -type sont utilisés pour restreindre considérablement le nombre de fichiers affectés. Je n'ai pas testé le script pour des structures de fichiers plus profondes, ni pour les blancs dans les noms de fichiers et autres caractères géniaux comme les sauts de ligne, les sauts de page, etc.

J'ai utilisé .1 car cela ne pose aucun problème dans la plupart des commandes, tandis que a ( et a ) ont souvent besoin d'être masqués.


Voir la vidéo: РЕАКЦИЯ УЧИТЕЛЯ ПО ВОКАЛУ: DIMASH - ОПЯТЬ МЕТЕЛЬ (Octobre 2021).