0
votes

Python 3 Conversions int et String

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))


0 commentaires

3 Réponses :


1
votes

Utilisation de regex et de dictionnaires Vous pouvez obtenir ce que vous recherchez:

3040000
5000000
3400


2 commentaires

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



1
votes

Essayez ceci xxx

le casfold convertit la chaîne en minuscule. Si le dernier caractère est alphabet, le numéro est multiplié par l'entier requis num .


0 commentaires

0
votes

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):

  • 3.04M
  • 3.4m
  • 3m

    correspondant au format "xxxx" du premier cas, vous pouvez utiliser xxx

    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:

    • "\." correspond à la.
    • "[0-9]" correspond à n'importe quel nombre de 0 à 9
    • "." Correspond à n'importe quel caractère

0 commentaires