J'ai quelques questions. Juste pour expliquer ce qui se passe dans ce code, je prends le nombre d'abonnés d'une chaîne YouTube et essayant de la convertir en int afin qu'elle puisse être multipliée, divisée, etc.
existe un moyen de mettre en place quelque chose comme ". suivi de trois caractères" dans la méthode .replace. En effet, certains canaux YouTube ont quelque chose comme des abonnés "3,04 m". Lorsque j'extraire cette chaîne du HTML, je veux pouvoir le transformer en int. C'est la première déclaration "si", j'essaie de dire "si le sous-dénombrement a une décimale suivi de 3 caractères, c'est-à-dire deux chiffres et la lettre, puis retirez la décimale et remplacez les lettres avec la quantité correspondante de zéros, selon au placement de la décimale. S'il n'y a pas 3 caractères après, je veux aller au premier "autre" qui abaisse seulement la valeur des lettres d'un facteur de 10, pas 100 à cause du placement décimal. Enfin, si Il n'y a pas de décimales, je veux simplement convertir les lettres en quantité régulière de zéros. p>
Je devrais probablement souligner que je suis extrêmement nouveau à Python, seulement environ 3 jours de travail avec elle. Expérience antérieure était Comme 10 heures de java que j'ai tout sauf oublié. P>
Merci pour toute aide pouvant être offerte! P>
subC = self.driver.find_element_by_xpath('/html/body/ytd-app/div/ytd-page-manager/ytd-browse/div[3]/ytd-c4-tabbed-header-renderer/app-header-layout/div/app-header/div[2]/div[2]/div/div[1]/div/div[1]/yt-formatted-string') print('subscriber count is: ' + str(subC.text)) if ".XXX" in subC.text: subC.text.replace('k' , '0') subC.text.replace('M' , '0000') subC.tect.replace('B' , '0000000') else: if "." in subC.text: subC.text.replace('k' , '00') subC.text.replace('M' , '00000') subC.text.replace('B' , '00000000') subC.text.replace('.' , '') else: subC.text.replace('k' , '000') subC.text.replace('M' , '000000') subC.text.replace('B' , '000000000') (realSub, other) = subC.text.split(maxsplit=1) print(int(realSub))
3 Réponses :
Utilisation de regex et de dictionnaires Vous pouvez obtenir ce que vous recherchez:
3040000 5000000 3400
Je pense que votre solution pourrait ne pas fonctionner s'il n'y a pas 2 chiffres après le point décimal ou s'il n'y a pas de point décimal (c'est-à-dire 3,4k ou 5m).
@ Tobiasnöthlich, c'est vrai. Je l'ai simplifié afin que cela fonctionne dans ces scénarios, mais cela suppose que la chaîne est juste le sous-comte et rien de plus
Essayez ceci le casfold code> convertit la chaîne en minuscule. Si le dernier caractère est alphabet, le numéro est multiplié par l'entier requis
num code>. P> p>
Vous pouvez utiliser des expressions régulières pour le faire. Si je comprenais correctement, les chiffres peuvent venir sous ces formats (avec K, M ou B):
correspondant au format "xxxx" du premier cas, vous pouvez utiliser p> avis que vous devez attribuer explicitement la chaîne où vous avez remplacé quelque chose à votre variable d'origine, car il n'est pas enregistré automatiquement.
En tant que petit supplément, l'expression régulière fonctionne comme suit: p>