J'ai un fichier avec une colonne. Comment supprimer des lignes répétées dans un fichier?Comment puis-je supprimer les lignes en double d'un fichier?
Répondre
Si vous êtes sur * nix, essayez d'exécuter la commande suivante:
sort <file name> | uniq
Sur Unix/Linux, utilisez la commande uniq
, selon la réponse de David Locke, ou sort
, selon le commentaire de William Pursell.
Si vous avez besoin d'un script Python:
lines_seen = set() # holds lines already seen
outfile = open(outfilename, "w")
for line in open(infilename, "r"):
if line not in lines_seen: # not a duplicate
outfile.write(line)
lines_seen.add(line)
outfile.close()
Mise à jour: Le sort
/uniq
combinaison supprimera les doublons mais renvoyer un fichier avec les lignes triées, qui peuvent ou peuvent ne pas être ce que vous voulez. Le script Python ci-dessus ne va pas réorganiser les lignes, mais simplement supprimer les doublons. Bien sûr, pour que le script ci-dessus puisse également être trié, il suffit d'omettre le outfile.write(line)
et, immédiatement après la boucle, de faire outfile.writelines(sorted(lines_seen))
.
Vous devez exécuter tri avant d'exécuter uniq car uniq ne supprimera les lignes que si elles sont identiques à la ligne précédente. –
Oui - J'ai fait référence à votre réponse, mais je n'ai pas répété que c'était un tri suivi par uniq. –
+1 pour cette solution. Une autre amélioration pourrait consister à stocker la somme md5 de la ligne et à comparer la somme md5 de la ligne courante. Cela devrait réduire considérablement les besoins en mémoire. (Voir http://docs.python.org/library/md5.html) – joeslice
uniqlines = set(open('/tmp/foo').readlines())
cela vous donnera la liste des lignes uniques.
écrit que revenir à un certain dossier serait aussi facile que:
bar = open('/tmp/bar', 'w').writelines(set(uniqlines))
bar.close()
Vrai, mais les lignes seront dans un ordre aléatoire en fonction de leur hachage. –
Quel est le problème avec les lignes qui ne sont pas triées? en ce qui concerne la question ici ... – marcell
Le problème avec ce code est qu'après avoir écrit, et la dernière ligne n'a pas de '\ n'. Ensuite, les résultats de sortie auront une ligne avec 2 lignes fusionnées. – wmlynarski
obtenir toutes vos lignes dans la liste et faire un ensemble de lignes et vous avez terminé. par exemple,
>>> x = ["line1","line2","line3","line2","line1"]
>>> list(set(x))
['line3', 'line2', 'line1']
>>>
et écrire le contenu dans le fichier.
Vrai, mais les lignes seront dans un ordre aléatoire en fonction de leur hachage. –
Voici ma solution
if __name__ == '__main__':
f = open('temp.txt','w+')
flag = False
with open('file.txt') as fp:
for line in fp:
for temp in f:
if temp == line:
flag = True
print('Found Match')
break
if flag == False:
f.write(line)
elif flag == True:
flag = False
f.seek(0)
f.close()
Python One liners:
python -c "import sys; lines = sys.stdin.readlines(); print ''.join(sorted(set(lines)))" <InputFile> OutputFile
Vous pouvez faire:
import os
os.system("awk '!x[$0]++' /path/to/file > /path/to/rem-dups")
Ici Vous utilisez bash en python :)
Vous avez également un autre moyen:
with open('/tmp/result.txt') as result:
uniqlines = set(result.readlines())
with open('/tmp/rmdup.txt', 'w') as rmdup:
rmdup.writelines(set(uniqlines))
Son une resucée de ce qui est déjà dit ici - ici ce que je l'utilise.
import optparse
def removeDups(inputfile, outputfile):
lines=open(inputfile, 'r').readlines()
lines_set = set(lines)
out=open(outputfile, 'w')
for line in lines_set:
out.write(line)
def main():
parser = optparse.OptionParser('usage %prog ' +\
'-i <inputfile> -o <outputfile>')
parser.add_option('-i', dest='inputfile', type='string',
help='specify your input file')
parser.add_option('-o', dest='outputfile', type='string',
help='specify your output file')
(options, args) = parser.parse_args()
inputfile = options.inputfile
outputfile = options.outputfile
if (inputfile == None) or (outputfile == None):
print parser.usage
exit(1)
else:
removeDups(inputfile, outputfile)
if __name__ == '__main__':
main()
ajouter à la réponse de Locke @ David, avec les systèmes * nix vous pouvez exécuter
sort -u messy_file.txt > clean_file.txt
qui va créer clean_file.txt
la suppression des doublons dans l'ordre alphabétique.
Si quelqu'un est à la recherche d'une solution qui utilise un hachage et est un peu plus flashy, ce que j'utilise actuellement:
def remove_duplicate_lines(input_path, output_path):
if os.path.isfile(output_path):
raise OSError('File at {} (output file location) exists.'.format(output_path))
with open(input_path, 'r') as input_file, open(output_path, 'w') as output_file:
seen_lines = set()
def add_line(line):
seen_lines.add(hash(line))
return line
output_file.writelines((add_line(line) for line in input_file
if hash(line) not in seen_lines))
Cette fonction est parfaitement efficace que le hachage est calculé deux fois, mais , Je suis sûr que la valeur est mise en cache.
- 1. supprimer les lignes en double
- 2. Unix outil pour supprimer les lignes en double d'un fichier
- 3. Supprimer des lignes en double à partir du fichier texte?
- 4. suppression des lignes en double à partir du fichier/grep
- 5. Suppression de lignes en double dans vi?
- 6. Comment supprimer des éléments en double d'un fichier xml?
- 7. Lignes en double dans Oracle
- 8. Supprimer des lignes du fichier
- 9. Fusionner, puis supprimer les entrées en double
- 10. Comment supprimer les lignes vides?
- 11. Comment supprimer les premières lignes "X" d'un fichier texte?
- 12. Suppression des lignes en double dans Postgres
- 13. Supprimer les lignes Gridview en C# 2008
- 14. Comment supprimer des nœuds XML en double en utilisant XSLT
- 15. Comment conserver une seule ligne d'une table, en supprimant les lignes en double?
- 16. éliminer les lignes en double partielles de jeu de résultats
- 17. Comment supprimer des éléments en double d'un tableau en Perl?
- 18. C#: Supprimer les valeurs en double du dictionnaire?
- 19. Comment supprimer des noeuds en double en utilisant XSLT?
- 20. Comment puis-je trouver des entrées en double et supprimer les plus anciennes en SQL?
- 21. Quelle est la meilleure façon de supprimer les lignes en double correspondant à regex de la chaîne en utilisant Python?
- 22. Comment puis-je supprimer des noeuds en double dans XQuery?
- 23. Comment supprimer des données en double dans SQL Server?
- 24. Comment faire pour supprimer les valeurs en double d'un tableau en PHP
- 25. Comment faire pour supprimer les valeurs en double d'un tableau en PHP et compter l'occurrence?
- 26. Comment supprimer toutes les lignes correspondantes dans un seul tampon?
- 27. Dans vim, comment puis-je supprimer toutes les lignes d'un fichier à l'exception des 100 dernières lignes?
- 28. requête SQL Pour supprimer les lignes
- 29. Comparer fichier et supprimer les doublons
- 30. Comment puis-je supprimer toutes les lignes sauf une sur quatre dans un fichier texte?
Ou juste trier -u –