Ecrire / analyser un fichier de largeur fixe en utilisant Python
Je suis un débutant en Python et je suis à la recherche de l'utiliser pour écrire des poilus EDI trucs que notre fournisseur exige.
Essentiellement, ils ont besoin de 80 caractères fichier texte à largeur fixe, avec certains "morceaux" du champ avec des données et d'autres laissés en blanc. J'ai la documentation donc je sais ce que la longueur de chaque "bloc" est. La réponse que je serai de retour est plus facile à analyser car il aura déjà données et je peux l'utiliser Python "tranches" pour en extraire ce dont j'ai besoin, mais je ne peut pas affecter à une tranche, j'ai essayé déjà parce que ça sonnait comme une bonne solution, et il n'a pas de travail depuis le Python chaînes sont immuables 🙂
Comme je l'ai dit je suis vraiment un débutant de Python, mais je suis heureux de l'apprendre 🙂 Comment pourrais-je aller sur le faire? Idéalement, je voudrais être en mesure de dire que la gamme de 10 à 20 est égal à "Foo" et la chaîne "Toto" avec 7 autres espaces (en supposant que dit champ a une longueur de 10) et n'ont qu'être une partie de plus de 80 caractères, mais je ne suis pas sûr de la façon de faire ce que je suis en train de penser.
source d'informationauteur Wayne Molina
Vous devez vous connecter pour publier un commentaire.
Vous n'avez pas besoin d'attribuer des tranches, de construire la chaîne à l'aide de
% mise en forme
.Un exemple avec un format fixe pour 3 éléments de données:
Même chose, de la largeur de champ fourni avec les données:
La séparation des données et de la largeur de champ, et à l'aide de
zip()
etstr.join()
astuces:J'espère que je comprends ce que vous cherchez: d'une certaine façon à facilement identifier chaque partie de la ligne par une simple variable, mais la sortie c'rembourré à la bonne largeur?
L'extrait de code ci-dessous peut vous donner ce que vous voulez
Cela donne:
Il fonctionne en stockant une classe de niveau variable,
fields
qui enregistre l'ordre dans lequel chaque champ doit apparaître dans la sortie, avec le nombre de colonnes que le champ doit avoir. Il ya en conséquence nommées variables d'instance dans le__init__
qui sont fixés à une chaîne vide au début.La
__str__
méthode de sorties de ces valeurs comme une chaîne de caractères. Il utilise une liste de compréhension sur le niveau de la classefields
attribut, à la recherche de la valeur d'instance pour chaque champ par son nom, puis à gauche en la justifiant de sortie selon les colonnes. La liste des champs est ensuite réunis par une chaîne vide.Noter que ce n'est pas analyser d'entrée, mais on pouvait facilement surcharger le constructeur à prendre une corde et d'analyser les colonnes en fonction du terrain et de la largeur de champ dans
fields
. Il n'a pas également de vérifier par exemple les valeurs qui sont plus longs que prévu largeur.Vous pouvez utiliser justifier fonctions de la justification à gauche, à droite-justifier et centre d'une chaîne de caractères dans un champ de largeur.
Je sais que ce fil est assez vieux, mais nous avons une bibliothèque appelée django-copybook. Il n'a rien à voir avec django (ou plus). Nous l'utilisons pour passer de largeur fixe cobol fichiers et python. Vous créez une classe pour définir votre largeur fixe d'enregistrement de mise en page et peuvent facilement se déplacer entre tapé des objets python et d'une largeur fixe de fichiers:
Il peut également gérer des situations similaires à la Cobol SE produit fonctionnalité comme quand une section particulière est répété X fois
C'est un peu difficile d'analyser votre question, mais je suis de collecte que vous avez reçu un fichier ou un fichier-comme-objet, de le lire, et le remplacement de certaines valeurs avec un peu de logique métier des résultats. Est-ce correct?
La façon la plus simple pour surmonter la chaîne de l'immuabilité est d'écrire une nouvelle chaîne:
Cela dit, il semble que c'est important pour vous que vous faites quelque chose avec cette chaîne, mais je ne suis pas sûr exactement ce que c'est. Êtes-vous de l'écrire dans un fichier de sortie, en essayant de modifier un fichier en place, ou quelque chose d'autre? Je soulève cette question parce que l'acte de la création d'une nouvelle chaîne (qui arrive à avoir le même nom de variable que l'ancienne chaîne) devrait mettre l'accent sur la nécessité de réaliser explicite d'une opération d'écriture après la transformation.
Vous pouvez convertir la chaîne en une liste et faire la tranche de manipulation.
Il est facile d'écrire la fonction "modifier" de la chaîne.
Utilisation:
J'ai utilisé Jarret Hardie exemple et l'a modifié légèrement. Ceci permet la sélection du type d'alignement du texte(gauche, droite ou centré.)
Retourne: