N'utilisez pas readlines () dans votre instruction Python for!

Juste au moment où je révisais le code que j'ai écrit il y a longtemps

python


try:
    with log_path.open(encoding='utf-8') as log_file:
        for line in log_file.readlines():
            ...

J'ai remarqué que j'écrivais du code comme celui-ci ici et là.

Le descripteur de fichier de Python (Remarque: version 2.4 ou ultérieure) est un itérateur, donc dans le code ci-dessus

python


        for line in log_file.readlines():

La ligne est

python


        for line in log_file:

Doit être écrit.

Même lorsqu'il est combiné avec ʻenumerate () `

python


        for line_number, line in enumerate(log_file.readlines(), 1):

ne pas,

python


	for line_number, line in enumerate(log_file, 1):

Il n'y a aucun problème d'écriture.

Si, pour une raison quelconque, vous voulez vraiment lire le fichier à la fois en utilisant la méthode readlines (), au lieu d'écrire readlines () dans l'instruction for

python


log_lines = []
try:
    with log_path.open(encoding='utf-8') as log_file:
        log_lines = log_file.readlines()
except IOError:
    pass
	
for line in log_lines:
    ...

Je pense que ça devrait être écrit comme ça.

Je vois parfois beaucoup de code long dans le bloc with, mais je devrais fermer le fichier ouvert si je n'en ai pas besoin, et comme le bloc with n'a pas de portée, je peux ignorer les traitements inutiles sans écriture bâclée. C'est vrai.

Comme mentionné ci-dessus, j'étais assez confus quant à la qualité de mon code, c'est donc une astuce que j'ai écrite avec ma propre prudence.

Recommended Posts

N'utilisez pas readlines () dans votre instruction Python for!
N'utilisez pas \ d dans les expressions régulières Python 3!
Utilisez pathlib dans Maya (Python2.7) en préparation du prochain Python3.7
[Introduction à Python] Comment utiliser l'opérateur in dans l'instruction for?
Utilisez config.ini avec Python
Bases de Python ② pour déclaration
Utiliser des dates en Python
Utiliser Valgrind avec Python
Utilisez Python dans votre environnement depuis Win Automation
Utiliser le profileur en Python
python: utilisez votre propre classe pour numpy ndarray
[Python] pour une erreur d'instruction
[Pour les débutants] Comment utiliser la commande say avec python!
Créez votre propre Big Data en Python pour validation
Utilisez CASA Toolkit dans votre propre environnement Python
Pratique pour utiliser les sous-graphiques matplotlib dans l'instruction for
Liste Python, pour instruction, dictionnaire
Utiliser l'expression let en Python
Utiliser le protocole de mesure avec Python
Utiliser la fonction de rappel en Python
Utiliser le magasin de paramètres en Python
Utiliser le cache HTTP en Python
Utilisez l'ODM de MongoDB avec Python
Utiliser un dict clé de liste en Python
Techniques de tri en Python
Utiliser Random Forest avec Python
Ne faites pas test.py en Python!
Utilisez Spyder de Python IDE
[Python / PyQ] 4. liste, pour instruction
À propos de "for _ in range ():" de python
Comment définir plusieurs variables dans une instruction Python for
[Route vers Python intermédiaire] Utiliser l'instruction if dans la notation d'inclusion de liste
Je ne savais pas comment utiliser l'instruction [python] for
Rechercher les fuites de mémoire dans Python
[Python] journalisation dans votre propre module
Exercices Python pour les débutants # 2 [pour instruction / instruction while]
Utilisez le tissu tel quel en python (fabric3)
Comment utiliser SQLite en Python
Ensuite, utilisez Python (Flask) pour Heroku!
Utiliser rospy avec virtualenv dans Python3
Python pour la déclaration ~ Qu'est-ce qui est itérable ~
Comment utiliser Mysql avec python
Utiliser Python mis en pyenv avec NeoVim
Comment utiliser ChemSpider en Python
Comment utiliser PubChem avec Python
Web scraping pour les débutants en Python (1)
Utiliser OpenCV avec Python 3 dans Window
Exécutez unittest en Python (pour les débutants)
[Python] Quatre-vingt-dix-neuf tables utilisant des instructions for
Web scraping pour les débutants en Python (4) -1
Envelopper (partie de) la bibliothèque AtCoder en Cython pour une utilisation en Python
Installer Networkx dans l'environnement Python 3.7 pour une utilisation dans les livres de science des données sur les logiciels malveillants
Une note à ceux qui utilisent Python dans Visual Studio (moi)
[Introduction à Python] Comment utiliser la classe en Python?
Utiliser l'impression dans l'expression lambda Python2
Créez vos propres commandes Linux en Python
Utiliser DeepL avec python (pour la traduction d'articles)
[LLDB] Créez votre propre commande avec Python
Note de nfc.ContactlessFrontend () de nfcpy de python
Inject est recommandé pour DDD en Python