0
votes

Réduire le nombre de déclarations de Python

J'ai un fichier TXT à analyser qui ressemble à: xxx pré>

et besoin de stocker des valeurs après --- --- code> étiquettes dans des variables. Cela fonctionne avec toutes ces déclarations, mais je me demandais s'il est possible de refroidir un nombre énorme d'IFS dans une structure (par exemple, dictionnaire), puis écrivez facilement cela pour produire le fichier. P>

Voici quelque chose que je Fabriqué: P>

"""Open a file to read"""
        for line in res:
            if "Instagram Usernames" in line:
                usernames = next(res)
            if "Date" in line:
                date = next(res)
            if "Address" in line:
                address = next(res)
            if "Neighborhood" in line:
                market = next(res)
            if "State" in line:
                city = next(res)
            if "Asset" in line:
                as_type = next(res)
            if "Sale Price" in line:
                price = next(res)
                if "," in price:
                    price = price.replace(',', '')
                if "$" in price:
                    price = price.replace('$', '')
            if "Square" in line:
                sf = next(res)
                if "," in sf:
                    sf = sf.replace(',', '')
                if "$" in sf:
                    sf = sf.replace('$', '')
            if "Buyer" in line:
                buyer = next(res)
            if "Seller" in line:
                seller = next(res)
            if "Broker" in line:
                brokers = next(res)
            if "Notes" in line:
                notes = next(res)

        """Write to output file"""
        fin.write("IMAGE:  @" + usernames)
        fin.write("DATE: " + date)
        fin.write("ADDRESS: " + address)
        fin.write("MARKET: " + market)
        fin.write("CITY: " + city)
        if as_type == "Multi Family" or "Multi Family\n":
            fin.write("ASSET TYPE: Multifamily\n")
        else:
            fin.write("ASSET TYPE: " + as_type)
        fin.write("PRICE: $" + price)
        if sf in bad_symb:
            fin.write("SF: N/A\n")
            fin.write("PPSF: N/A\n")
        else:
            fin.write("SF: " + sf)
            fin.write("PPSF: $" + "{0:.2f}\n".format(float(price) / float(sf)))
        fin.write("BUYER: " + buyer)
        fin.write("SELLER: " + seller)
        fin.write("BROKERS: " + brokers + "\n")
        if notes != "\n":
            fin.write("NOTES: " + notes + "\n")
        fin.write(footer_sale(market, buyer, seller))


2 commentaires

Qu'en est-il d'une carte de fonction? Vous devez stocker une référence de fonction dans la dicte sous forme de fmap = {'carré': carré,) Vous devez maintenant le faire de fonction et appeler la fonction donnée si elle ne peut pas ignorer.


Chaque fois que vous trouvez une ligne que startswith ('-') Vous pouvez stocker son contenu comme clé et la ligne suivante comme valeur, dans une dicte. Cela remplacera tous vos énoncés si .


3 Réponses :


0
votes

Vous pouvez utiliser un dictionnaire avec tout ce qui entre les tirets étant la clé et la ligne suivante étant la valeur correspondante.

Comme nous n'utilisons pas de boucle, nous avons d'abord scindé le contenu du fichier dans ses lignes. : xxx

La ligne suivante produit le dictionnaire; res [:: 2] choisit chaque deuxième élément dans res , en commençant par le premier élément (toutes les lignes avec --- ), res [1 :: 2] chaque deuxième élément, en commençant par le deuxième élément (toutes les lignes avec des informations).

Nous choisissons maintenant les lignes avec --- En tant que clé pour chaque entrée dans le dictionnaire et les lignes d'information comme valeurs: clé: valeur ; Comme vous ne voulez probablement pas inclure les tirets, nous les dépassons et l'espace du début et la fin avec .rstrip ("-") : xxx

Maintenant, vous pouvez facilement indexer x pour obtenir les informations souhaitées, qui simplifieront également l'écriture dans votre fichier de sortie.


0 commentaires

0
votes

Utilisez une fonction Lambda définie pour rechercher la chaîne de ligne suivante dans la liste des chaînes de la ligne.

all_vals = {k: search_func(all_vars_search_dict[k]) for k in all_vars_search_dict}


0 commentaires

1
votes

Lorsque j'ai une séquence d'articles comme celle-ci, j'aime configurer une petite structure de données qui spécifie ce que je recherche, et si je le trouve là où il devrait aller. XXX < p> Maintenant, votre mappage d'étiquettes à attributs est plus facile à vérifier, et votre cascade de 'If est juste un seul Expression

Pour écrire la sortie, il suffit d'accéder à la sortie. différents articles dans les données dict.


1 commentaires

Tu es le patron! C'est ce que j'ai essayé de mettre en œuvre dans mon projet, merci beaucoup :)