Python >> Tutoriel Python >  >> Python

Comment écrire dans un fichier en Python

Avec Python, vous pouvez modifier et écrire directement dans un fichier par programmation, ce qui vous évite d'avoir à le faire manuellement. Dans cet article, vous apprendrez à écrire dans un fichier en Python.

Avant de plonger dans les détails de la façon d'écrire dans un fichier en Python, je tiens à mentionner que j'utilise Python 3.8.5 et Windows 10. Cependant, vos résultats devraient être les mêmes sur n'importe quel système d'exploitation.

Il est bon d'avoir une certaine connaissance de la manipulation de fichiers avant de lire cet article. Pour plus d'informations, consultez Comment travailler avec des fichiers et des répertoires en Python et Comment renommer des fichiers avec Python.

Il existe plusieurs façons d'écrire dans des fichiers et d'écrire des données en Python. Commençons par le write() méthode.

Utilisez write() pour écrire dans un fichier en Python

La première étape pour écrire un fichier en Python est de l'ouvrir, ce qui signifie que vous pouvez y accéder via un script. Il existe deux manières d'ouvrir un fichier. La première consiste à utiliser open() , comme indiqué ci-dessous :

# open the file in the write mode
f = open('file.txt', 'w')

Cependant, avec cette méthode, vous devez fermer le fichier vous-même en appelant le close() méthode :

# close the file
f.close()

Il est plus court d'utiliser le with déclaration, car nous n'avons pas besoin d'appeler le close() méthode.

Voici la méthode que nous allons utiliser dans ce tutoriel :

with open("file.txt", "w") as file:

La ligne de code ci-dessus ouvrira file.txt et affectera le gestionnaire de fichiers à la variable appelée file .

On peut alors appeler le write() méthode pour modifier notre fichier par programme.

Exécutons un exemple :

file.write("Python is awesome!") 

Une fois cette commande exécutée, nous voulons lire le fichier pour voir s'il a été mis à jour. Nous devons appeler le read() méthode, comme indiqué ci-dessous :

# Open and read the file after writing:
with open("file.txt", "r") as file:
    print(file.read())

Il est important de noter que les paramètres dans le open() la fonction décidera où le write() méthode sera active.

Si vous voulez en savoir plus sur la façon d'écrire des fichiers en Python avec le write() méthode, consultez notre cours sur l'utilisation de fichiers et de répertoires en Python.

Utilisez writelines() pour ajouter des données de liste à un fichier

Une autre méthode que vous pouvez utiliser est writelines() . Cette méthode ajoute les termes d'une liste de manière programmatique. Exécutons un exemple :

# open file
with open("file2.txt", "a") as file:
    # write to file
    file.writelines(["Hey there!", "LearnPython.com is awesome!"])

#open and read the file after the appending:
with open("file2.txt", "r") as file:
    print(file.read())

Après avoir vérifié la sortie, vous remarquerez que writelines() n'ajoute aucun séparateur de ligne par défaut; nous devons spécifier le séparateur de ligne. Nous pouvons modifier notre code avec ce qui suit :

# open and write to file
with open("file2.txt", "a") as file:
    file.writelines(["Hey there!\n", "LearnPython.com is awesome!\n"])

# open and read the file after the appending:
with open("file2.txt", "r") as file:
    print(file.read())

Une façon plus Pythonic et efficace de le faire est :

# open file
with open("file2.txt", "a") as file:
    # set a list of lines to add:
    lines = ["Hey there!", "LearnPython.com is awesome!"]
    # write to file and add a separator
    file.writelines(s + '\n' for s in lines)

#open and read the file after the appending:
with open("file2.txt", "r") as file:
    print(file.read())

Le code ci-dessus utilisera de nouvelles lignes comme séparateur de ligne.

Écrire des données dans des fichiers CSV en Python

Vous trouverez peut-être utile de pouvoir mettre à jour un fichier CSV directement avec Python.

CSV signifie valeurs séparées par des virgules. Si vous êtes un professionnel de la data, vous êtes certainement déjà tombé sur ce genre de fichier. Un fichier CSV est un fichier texte brut contenant une liste de données. Ce type de fichier est souvent utilisé pour échanger des données entre applications. Si vous souhaitez actualiser vos connaissances sur les fichiers CSV, lisez notre article Comment lire des fichiers CSV en Python.

Dans cette partie, nous utiliserons le csv intégré de Python module pour mettre à jour un fichier CSV.

Lorsque vous souhaitez écrire des données dans un fichier en Python, vous souhaiterez probablement ajouter une ou plusieurs lignes à la fois. Les données peuvent être stockées dans des listes ou un dictionnaire. Explorons quelques façons d'écrire des données dans des fichiers en Python.

Écrire des données de liste dans un CSV

Explorons comment ajouter une seule ligne de données avec writerow() et plusieurs lignes de données avec writerows() .

Utilisez writerow() pour une seule ligne

Pour écrire dans un fichier CSV, nous devons ouvrir le fichier, créer un objet écrivain et mettre à jour le fichier. Exécutons un exemple :

# import
import csv

# Create header and data variables
header = ['last_name', 'first_name', 'zip_code', 'spending']
data = ['Doe', 'John', 546000, 76]

with open('customers.csv', 'w', encoding='UTF8', newline='') as file:
    # Create a writer object
    writer = csv.writer(file)
    # Write the header
    writer.writerow(header)
    # Write the data
    writer.writerow(data)

Pour des informations détaillées, c'est toujours une bonne idée de lire la documentation.

Voyons maintenant comment écrire des données en Python lorsque vous devez ajouter plusieurs lignes de données.

Utilisez writerows() pour plusieurs lignes

Nous pouvons écrire plusieurs lignes dans un fichier en utilisant le writerows() méthode :

# import
import csv

# Create header and data variables
header = ['last_name', 'first_name', 'zip_code', 'spending']
data = [
    ['Smith', 'Nicholas', 453560, 82],
    ['Thompson', 'Julia', 326908, 143],
    ['French', 'Michael', 678321, 189],
    ['Wright', 'Eva', 285674, 225],
    ['White', 'David', 213456, 167]
]

with open('customers.csv', 'w', encoding='UTF8', newline='') as file:
    # Create a writer object
    writer = csv.writer(file)
    # Write the header
    writer.writerow(header)
    # Add multiple rows of data
    writer.writerows(data)

Nous venons d'ajouter plusieurs lignes à notre fichier.

Vous pouvez trouver plus d'informations sur le writerows() méthode dans la documentation.

Écrire des données de dictionnaire dans un CSV

Si chaque ligne du fichier CSV est un dictionnaire, vous pouvez mettre à jour ce fichier en utilisant le csv dictWriter() du module fonction. Par exemple :

# import
import csv

# csv header
fieldnames = ['last_name', 'first_name', 'zip_code', 'spending']

# csv data
rows = [{
    'last_name': 'bloggs',
    'first_name': 'Joe',
    'zip_code': 986542,
    'spending': 367
},{
    'last_name': 'Soap',
    'first_name': 'Bob',
    'zip_code': 567890,
    'spending': 287
},{
    'last_name': 'farnsbarns',
    'first_name': 'Charlie',
    'zip_code': 123456,
    'spending': 245
}]

with open('customers.csv', 'w', encoding='UTF8', newline='') as f:
    # Create a writer object
    writer = csv.DictWriter(f, fieldnames=fieldnames)
    # Write header
    writer.writeheader()
    # Write data from dictionary
    writer.writerows(rows)

Et c'est tout ce que vous avez à faire !

Si vous souhaitez en savoir plus sur le sujet, n'oubliez pas de consulter le cours sur l'utilisation des fichiers et des répertoires en Python.

Utiliser pathlib pour écrire des fichiers en Python

Explorons maintenant l'utilisation du pathlib module pour écrire dans un fichier en Python. Si vous n'êtes pas familier avec pathlib, consultez mon article précédent sur le changement de nom de fichier avec Python.

Il est important de noter que pathlib a une plus grande portabilité entre les systèmes d'exploitation et est donc préféré.

Utilisez write_text()

Nous pouvons utiliser le Path().write_text() méthode de pathlib pour écrire du texte dans un fichier.

D'abord, nous utilisons le Path classe de pathlib pour accéder au file.txt , et deuxièmement, nous appelons le write_text() méthode pour ajouter du texte au fichier. Exécutons un exemple :

# import 

from pathlib import Path 

# Open a file and add text to file

Path('file.txt').write_text('Welcome to LearnPython.com')

Ensuite, nous utiliserons le is_file() , with_name() et with_suffix() fonctions pour filtrer les fichiers que nous voulons mettre à jour. Nous ne mettrons à jour que les fichiers remplissant certaines conditions.

Le is_file() La fonction renverra une valeur booléenne qui est True si le chemin pointe vers un fichier normal et False si ça ne fait pas. Le with_name() renverra un nouveau chemin avec le nom de fichier modifié. Enfin, with_suffix() créera un nouveau chemin avec une nouvelle extension de fichier.

Vous pouvez lire les détails de ces méthodes dans la documentation Python.

Exécutons un exemple qui démontre tout cela. Nous allons ouvrir notre fichier texte, écrire du texte, renommer le fichier et l'enregistrer en tant que fichier CSV.

# import
from pathlib import Path

# set the directory
path = Path.cwd() / 'file.txt'

# Check if the file is a file
if path.is_file():
    # add text
    path.write_text('Welcome to LearnPython.com')
    # rename file with new extension
    path.replace(path.with_name('new_file').with_suffix('.csv'))

Manipulation de fichiers en Python

Dans cette dernière partie, nous explorerons la manipulation de fichiers en Python en utilisant le tell() et seek() méthodes.

Utilisez tell() pour obtenir la position actuelle

Le tell() peut être utilisée pour obtenir la position actuelle du descripteur de fichier dans le fichier.

Cela aide à déterminer d'où les données seront lues ou écrites dans le fichier en termes d'octets depuis le début du fichier.

Vous pouvez considérer le descripteur de fichier comme un curseur qui définit où les données sont lues ou écrites dans le fichier. Cette méthode ne prend aucun paramètre et renvoie un entier.

Exécutons un exemple :

# Open a file in read mode
with open("file.txt", "r") as file:
    # print position of handle
    print(file.tell())
    # prints 0

Vous pouvez trouver plus d'informations dans la documentation Python.

Utilisez seek() pour modifier les positions du flux

Le seek() La méthode est utilisée pour changer la position du flux. Un flux est une séquence d'éléments de données mis à disposition au fil du temps, et la position du flux fait référence à la position du pointeur dans le fichier.

Le seek() est utile si vous avez besoin de lire ou d'écrire à partir d'une partie spécifique du fichier. La syntaxe est :

fp.seek(offset, whence)

Qu'est-ce que cela signifie ?

  • fp est le pointeur de fichier.
  • offset est le nombre de positions que vous souhaitez déplacer. Il peut s'agir d'un nombre positif (en avant) ou négatif (en arrière).
  • whence définit votre point de référence. Cela peut être :
    • 0 :le début du fichier.
    • 1 :la position actuelle dans le fichier.
    • 2 :La fin du fichier.

Si vous omettez le paramètre d'où, la valeur par défaut est 0.

Lorsque nous ouvrons le fichier, la position est le début du fichier. Au fur et à mesure que nous travaillons avec, la position progresse.

Le seek() La fonction est utile lorsque nous devons parcourir un fichier ouvert. Exécutons un exemple rapide :

# Open a file
with open("file.txt", "r") as file:
    file.seek(4)
    print(file.readline())

Vous pouvez trouver plus d'informations dans la documentation Python.

En savoir plus sur l'utilisation de fichiers en Python

Nous avons couvert beaucoup de terrain dans cet article. Vous acquérez de solides connaissances sur la manipulation de fichiers avec Python.

Vous savez maintenant comment écrire dans un fichier en Python et comment écrire des données dans un fichier en Python. Nous avons également brièvement exploré le tell() et seek() méthodes pour manipuler un fichier.

N'oubliez pas de consulter notre cours sur l'utilisation de fichiers et de répertoires en Python pour approfondir et consolider vos connaissances en Python !