J'ai un grand nombre de fichiers .txt, chacun contenant une liste d'URL. Dans chaque fichier, il existe des URL dupliqués. Il n'y a pas de duplication entre les fichiers. Je veux supprimer les URL déploimer de l'intérieur dans chaque fichier.
J'ai écrit un script qui a fonctionné correctement sur un seul fichier. Maintenant, je veux le faire courir contre le grand ensemble de fichiers. P>
File "C:\Users\myscripts\myscript.py", line 66, in <module> lines=open(f,'r').readlines() FileNotFoundError: [Errno 2] No such file or directory: 'myfile.txt'
3 Réponses :
Oui, vous devez ajouter le chemin relatif (chemin d'accès au répertoire) lors de l'ouverture du fichier, en tant que tel identique lorsque vous ouvrez le fichier pour écrire, remarquez que et d'ailleurs, si vous utilisez un et, en outre, je croirais la manière la plus efficace serait p> f code> est une chaîne et ne disposera pas des code> code>, vous devriez code> Readlines code> de l'objet renvoyé par
Ouvrir code>, il en va de même pour Écriture p>
SET CODE>, il n'est pas nécessaire de vérifier si une ligne est écrite, en tant que jeu n'autorise aucun doublure, vous pouvez simplement ajouter tout lignes à un ensemble, puis écrivez l'ensemble sur le fichier de sortie comme tel p>
Vous devez utiliser la bibliothèque os code> pour concaténer les chemins, ne jamais concaténer les chemins manuellement ...
Parfait, ça fait exactement ce que je voulais. Merci.
Vous devrez concaténer le chemin code> au nom du fichier afin de créer le chemin complet et de l'attribuer à une variable. Supposons que le nom du fichier est stocké dans la variable Vous devez appliquer la même lorsque vous ouvrez le fichier dans le mode Un commentaire supplémentaire sur votre code ... Vous ne devez pas continuer à accumuler le à résumer, j'utiliserais le code suivant: p> nom de fichier code>. Ainsi, le fichier peut être ouvert à l'aide de
w code>, n'oubliez pas que
importer os code > Au début de votre script P>
vu_lines code> car si vous avez beaucoup de lignes dans votre fichier, il sera besoin de beaucoup de mémoire ram. Au lieu de cela, calculez le
hachage code> de chaque ligne et les accumulez dans un ensemble. Il sera également considérablement plus rapide que votre code actuel. P>
Cela ne fonctionnerait clairement pas car vous exécutez le nom de fichier lors de l'ouverture pour la lecture et d'essayer de l'utiliser pour écrire, le reste du code souffre d'une inefficacité
@rotemtal Quelles sont les inefficacités que le code souffre?
Vous avez complètement raison. Corrigée. Merci. Pouvez-vous commenter la partie inefficacité? Il est beaucoup plus efficace que le code de l'auteur. Si vous avez quelque chose à dire pour le code de l'autre, veuillez fournir des arguments
Merci pour la modification, @ganeshtata. C'est un plaisir de travailler avec des utilisateurs comme vous: D
@GaneshTata Toute l'itération est inefficace, mais spécifiquement, le hachage est inutile, plus lorsque vous avez ajouté à un ensemble, il n'est pas nécessaire de vérifier si l'élément existe dans l'ensemble, car un ensemble ignore donc inefficace.
@ROTEMTAL qui n'est pas vrai, le hachage est nécessaire car il réduit beaucoup l'utilisation de la mémoire (à partir d'une chaîne à un INT64). La partie où je vérifie si l'élément est déjà dans l'ensemble est complètement nécessaire et non pour l'ajout du hachage à l'ensemble mais pour écrire la ligne dans le fichier. S'il vous plaît lorsque vous analysez le code des autres réfléchit deux fois avant de commenter.
Votre argument sur la mémoire est accepté et ce n'est toujours pas un moyen efficace d'effectuer cette tâche, et non la solution correcte d'utiliser le fichier Python définir code>
Je ne vois pas votre proposition efficace nulle part, @rotemtal
Essayez de remplacer avec p>
Veuillez utiliser la bibliothèque os code> pour concaténer des chemins. Certains chemins contiendront un
/ code> à la fin, puis votre code échouera