0
votes

Lire uniquement les nombres d'un fichier txt python

J'ai un fichier texte qui contient ces quelques mots et un nombre écrit avec un point. Par exemple
bonjour! 54.123

Maintenant, je veux seulement que le nombre 54.123 soit extrait et converti afin que le résultat soit 54123

Le code que j'ai essayé est

< pre> XXX

Mais cela renvoie l'erreur: ValueError: littéral invalide pour int () avec base 10: '54 .123 '

Est-ce que quelqu'un connaît une solution pour cela?


1 commentaires

Eh bien, que pensez-vous de cette erreur?


3 Réponses :


0
votes

Cela peut aider. J'obtiens maintenant des nombres à partir du fichier. Je suppose que vous essayiez d'utiliser la division à la place de la bande

import re
exp = re.compile(r'[0-9]')

my_list = []
with open('file.txt') as f:
    lines = f.readlines()
    for line in lines:
        for numbers in line.split():
            if re.match(exp, numbers):
                my_list.append(numbers)

#convert to a string
listToStr = ' '.join([str(elem) for elem in my_list])
print(listToStr)


0 commentaires

0
votes

Vous pouvez vérifier si une ligne donnée est une chaîne représentant un nombre en utilisant la fonction isdigit () .

D'après ce que je peux dire, vous devez simplement vérifier s'il y a un nombre car isdigit () ne fonctionne que sur des entiers (les flottants contiennent "." qui n'est pas un nombre et renvoie False) .

Par exemple:

string = 54.123
new_string = string.replace('.', '') # replace . with nothing
print(new_string) # 54123

Remarque: si vos données contiennent des éléments tels que 123ab56 , alors ce ne sera pas bon pour vous.


Pour convertir 54.123 en 54123, vous pouvez utiliser la fonction replace (ancien, nouveau) .

Par exemple:

def numCheck(string):
  # Checks if the input string contains numbers
  return any(i.isdigit() for i in string)

string = '54.123'
print(numCheck(string)) # True

string = 'hello'
print(numCheck(string)) # False


1 commentaires

Merci pour votre commentaire! Je vais l'examiner!



0
votes

Vous pouvez essayer de convertir la ligne courante en flottant. Si la ligne ne contient pas de nombre flottant légitime, elle renvoie une exception ValueError que vous pouvez attraper et simplement passer. Si aucune exception n'est lancée, divisez simplement la ligne au niveau du point, joignez les 2 parties, convertissez en int et ajoutez au tableau.

my_list = []
with open('file.txt') as f:
    lines = f.readlines()
    for line in lines:
        try:
            tmp = float(line)
            num = int(''.join(line.split(".")))
            my_list.append(num)
        except ValueError:
            pass

#convert to a string
listToStr = ' '.join([str(elem) for elem in my_list])
print(listToStr)


0 commentaires