Mon fichier csv d'entrée se présente comme suit

S.No premier deuxième tiers

1 71,28 75,30 79,78

2 3,45 36,65 25,4

Mon objectif est d'extraire les deux premiers chiffres des première, deuxième et troisième colonnes de chaque ligne.

J'ai utilisé la liste pour stocker la sortie, qui se présente comme suit.

['71','75','79']

['3.','36','25']

Mais je veux avoir la sortie suivante (au lieu de '3.' Je veux '03')

['71','75','79']

['03','36','25']

J'ai essayé de mon mieux mais sans succès. Je ne sais pas où je me trompais.

Mon essai: par exemple, laissez a=['1','2','34']

Alors j'ai utilisé print str(a[0].zfill(2)) qui sort 01 qui est ce dont j'avais besoin, mais en cas de fichier principal, cela ne fonctionne pas. Aidez-moi, s'il vous plaît.

1
user1659936 5 mars 2016 à 21:18

3 réponses

Meilleure réponse

Vous voudrez parcourir votre liste de chaînes, puis convertir chacune d'entre elles en float (car il semble que vous ayez des décimales), puis les convertir en un nombre à zéro.

data = ['3.','36','25'];
new_data = ['%02d' % float(x) for x in data]

Le spécificateur de format '% 02d', indique que vous voulez un entier ("d") qui, s'il a moins de 2 chiffres, sera complété par zéro ("02").

Si vous préférez la méthode format.

new_data = ['{0:02.0f}'.format(float(x)) for x in data]

Ce spécificateur de format signifie que vous voulez un nombre à deux chiffres avec un zéro ("02") suivi de zéro après la décimale (".0") et le type de données d'entrée est un float ("f")

REMARQUE : ces deux solutions supposent que vous ne vous souciez pas des parties non entières des données (le cas échéant).

3
Suever 5 mars 2016 à 18:37

Eh bien, je ne suis pas un programmeur python, mais si l'on doit utiliser Regex pour le résoudre, le suivant trouvera le numéro souhaité. qui est un chiffre avant la décimale.

Regex: \b(\d)\.\d*\b

Explication:

  • \b au début et à la fin conserve la limite du mot.

  • (\d)\.\d* met en correspondance le chiffre unique avec la partie décimale mais capture uniquement le chiffre unique.

Remplacement à faire: Remplacez par 0\1. Où \1 est capturé à un chiffre.

Démo Regex101

Remarque: je ne suis pas un programmeur python. Si quelqu'un souhaite ajouter une démonstration du programme python à cette réponse, allez-y.

0
user2705585user2705585 5 mars 2016 à 18:34

Recherchez la mise en forme des chaînes à l'aide de '%'. Par exemple, vous pouvez utiliser '% 02d' pour obtenir des zéros non significatifs avec une valeur entière.

2
Charlie Martin 5 mars 2016 à 18:21