J'ai un fichier TXT à analyser qui ressemble à: et besoin de stocker des valeurs après Voici quelque chose que je Fabriqué: P> --- --- 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>
"""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))
3 Réponses :
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. : p> La ligne suivante produit le dictionnaire; Nous choisissons maintenant les lignes avec Maintenant, vous pouvez facilement indexer res [:: 2] code> choisit chaque deuxième élément dans
res code>, en commençant par le premier élément (toutes les lignes avec
--- code>),
res [1 :: 2] code> chaque deuxième élément, en commençant par le deuxième élément (toutes les lignes avec des informations). P>
--- code > En tant que clé pour chaque entrée dans le dictionnaire et les lignes d'information comme valeurs:
clé: valeur code>; Comme vous ne voulez probablement pas inclure les tirets, nous les dépassons et l'espace du début et la fin avec
.rstrip ("-") code>: p>
x code> pour obtenir les informations souhaitées, qui simplifieront également l'écriture dans votre fichier de sortie. P> P>
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}
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. Pour écrire la sortie, il suffit d'accéder à la sortie. différents articles dans les données Expression code> p>
code> dict. p> p>
Tu es le patron! C'est ce que j'ai essayé de mettre en œuvre dans mon projet, merci beaucoup :)
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 ('-') code> Vous pouvez stocker son contenu comme clé et la ligne suivante comme valeur, dans une dicte. Cela remplacera tous vos énoncés
si code>.