Recherche…


Utiliser input () et raw_input ()

Python 2.x 2.3

raw_input attendra que l'utilisateur saisisse du texte, puis renvoie le résultat sous forme de chaîne.

foo = raw_input("Put a message here that asks the user for input")

Dans l'exemple ci-dessus, foo stockera toutes les entrées fournies par l'utilisateur.

Python 3.x 3.0

input attendra que l'utilisateur saisisse du texte, puis renvoie le résultat sous forme de chaîne.

foo = input("Put a message here that asks the user for input")

Dans l'exemple ci-dessus, foo stockera toutes les entrées fournies par l'utilisateur.

Utiliser la fonction d'impression

Python 3.x 3.0

Dans Python 3, la fonctionnalité d'impression prend la forme d'une fonction:

print("This string will be displayed in the output")
# This string will be displayed in the output

print("You can print \n escape characters too.")
# You can print escape characters too.
Python 2.x 2.3

Dans Python 2, print était à l'origine une déclaration, comme indiqué ci-dessous.

print "This string will be displayed in the output"
# This string will be displayed in the output

print "You can print \n escape characters too."
# You can print escape characters too.

Remarque: l'utilisation from __future__ import print_function dans Python 2 permettra aux utilisateurs d'utiliser la fonction print() la même manière que le code Python 3. Ceci est uniquement disponible dans Python 2.6 et supérieur.

Fonction pour demander à l'utilisateur un numéro

def input_number(msg, err_msg=None):
    while True:
        try:
            return float(raw_input(msg))
        except ValueError:
            if err_msg is not None:
                print(err_msg)


def input_number(msg, err_msg=None):
    while True:
        try:
            return float(input(msg))
        except ValueError:
            if err_msg is not None:
                print(err_msg)

Et pour l'utiliser:

user_number = input_number("input a number: ", "that's not a number!")

Ou, si vous ne voulez pas de "message d'erreur":

user_number = input_number("input a number: ")

Imprimer une chaîne sans nouvelle ligne à la fin

Python 2.x 2.3

Dans Python 2.x, pour continuer une ligne avec print , terminez l'instruction print par une virgule. Il ajoutera automatiquement un espace.

print "Hello,",
print "World!"
# Hello, World!
Python 3.x 3.0

Dans Python 3.x, la fonction d' print a un paramètre de end facultatif qui est ce qu'il imprime à la fin de la chaîne donnée. Par défaut, il s'agit d'un caractère de nouvelle ligne, si équivalent à ceci:

print("Hello, ", end="\n")
print("World!")
# Hello, 
# World!

Mais vous pourriez passer dans d'autres chaînes

print("Hello, ", end="")
print("World!")
# Hello, World!

print("Hello, ", end="<br>")
print("World!")
# Hello, <br>World!

print("Hello, ", end="BREAK")
print("World!")
# Hello, BREAKWorld!

Si vous voulez plus de contrôle sur la sortie, vous pouvez utiliser sys.stdout.write :

import sys

sys.stdout.write("Hello, ")
sys.stdout.write("World!")
# Hello, World!

Lire de stdin

Les programmes Python peuvent lire des pipelines Unix . Voici un exemple simple de lecture de stdin :

import sys

for line in sys.stdin:
    print(line)

sys.stdin est un flux. Cela signifie que la boucle for ne se terminera que lorsque le flux sera terminé.

Vous pouvez maintenant diriger la sortie d'un autre programme dans votre programme python comme suit:

$ cat myfile | python myprogram.py

Dans cet exemple, cat myfile peut être n'importe quelle commande unix qui sort en stdout .

Sinon, l'utilisation du module fileinput peut s'avérer utile:

import fileinput
for line in fileinput.input():
    process(line)

Entrée d'un fichier

L'entrée peut également être lue à partir de fichiers. Les fichiers peuvent être ouverts en utilisant la fonction intégrée open . Utiliser une syntaxe with <command> as <name> syntaxe with <command> as <name> (appelée «gestionnaire de contexte») simplifie grandement l’utilisation de open et l’obtention d’un handle pour le fichier:

with open('somefile.txt', 'r') as fileobj:
    # write code here using fileobj

Cela garantit que, lorsque l'exécution du code quitte le bloc, le fichier est automatiquement fermé.

Les fichiers peuvent être ouverts dans différents modes. Dans l'exemple ci-dessus, le fichier est ouvert en lecture seule. Pour ouvrir un fichier existant à des fins de lecture, utilisez uniquement r . Si vous voulez lire ce fichier en octets, utilisez rb . Pour ajouter des données à un fichier existant, utilisez a . Utilisez w pour créer un fichier ou écraser les fichiers existants du même nom. Vous pouvez utiliser r+ pour ouvrir un fichier à la fois pour la lecture et l'écriture. Le premier argument de open() est le nom du fichier, le second est le mode. Si le mode est laissé vide, la valeur par défaut sera r .

# let's create an example file:
with open('shoppinglist.txt', 'w') as fileobj:
    fileobj.write('tomato\npasta\ngarlic')

with open('shoppinglist.txt', 'r') as fileobj:
    # this method makes a list where each line 
    # of the file is an element in the list
    lines = fileobj.readlines()

print(lines)
# ['tomato\n', 'pasta\n', 'garlic']

with open('shoppinglist.txt', 'r') as fileobj:
    # here we read the whole content into one string:
    content = fileobj.read()
    # get a list of lines, just like int the previous example:
    lines = content.split('\n')

print(lines)
# ['tomato', 'pasta', 'garlic']

Si la taille du fichier est infime, il est prudent de lire tout le contenu du fichier en mémoire. Si le fichier est très volumineux, il est souvent préférable de lire ligne par ligne ou par morceaux et de traiter l'entrée dans la même boucle. Pour faire ça:

with open('shoppinglist.txt', 'r') as fileobj:
    # this method reads line by line:
    lines = []
    for line in fileobj:
        lines.append(line.strip())

Lors de la lecture de fichiers, tenez compte des caractères de saut de ligne spécifiques au système d'exploitation. Bien que for line in fileobj , il est automatiquement supprimé, il est toujours prudent d'appeler strip() sur les lignes lues, comme indiqué ci-dessus.

Les fichiers ouverts ( fileobj dans les exemples ci-dessus) pointent toujours vers un emplacement spécifique du fichier. Lorsqu'ils sont ouverts pour la première fois, le descripteur de fichier pointe au tout début du fichier, qui correspond à la position 0 . Le handle de fichier peut afficher sa position actuelle avec tell :

fileobj = open('shoppinglist.txt', 'r')
pos = fileobj.tell()
print('We are at %u.' % pos) # We are at 0.

En lisant tout le contenu, la position du gestionnaire de fichiers sera pointée à la fin du fichier:

content = fileobj.read()
end = fileobj.tell()
print('This file was %u characters long.' % end)
# This file was 22 characters long.
fileobj.close()

La position du gestionnaire de fichiers peut être définie selon vos besoins:

fileobj = open('shoppinglist.txt', 'r')
fileobj.seek(7)
pos = fileobj.tell()
print('We are at character #%u.' % pos)

Vous pouvez également lire n'importe quelle longueur du contenu du fichier pendant un appel donné. Pour cela, passez un argument pour read() . Lorsque read() est appelé sans argument, il sera lu jusqu'à la fin du fichier. Si vous passez un argument, il lira ce nombre d'octets ou de caractères, en fonction du mode ( rb et r respectivement):

# reads the next 4 characters 
# starting at the current position
next4 = fileobj.read(4)
# what we got?
print(next4) # 'cucu'
# where we are now?
pos = fileobj.tell()
print('We are at %u.' % pos) # We are at 11, as we was at 7, and read 4 chars.

fileobj.close()

Pour démontrer la différence entre les caractères et les octets:

with open('shoppinglist.txt', 'r') as fileobj:
    print(type(fileobj.read())) # <class 'str'>

with open('shoppinglist.txt', 'rb') as fileobj:
    print(type(fileobj.read())) # <class 'bytes'>


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow