Tengo un archivo con una columna. ¿Cómo eliminar líneas repetidas en un archivo?¿Cómo puedo eliminar líneas duplicadas de un archivo?
Respuesta
Si estás en * nix, intente ejecutar el siguiente comando:
sort <file name> | uniq
En Unix/Linux, utilice el comando uniq
, según la respuesta de David Locke, o sort
, de acuerdo con el comentario de William Pursell.
Si necesita un script en 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()
Actualización: La combinación sort
/uniq
va a eliminar duplicados, pero devolver un archivo con las líneas ordenados, los cuales pueden o no ser lo que quieres. La secuencia de comandos de Python anterior no reordenará las líneas, sino que solo colocará duplicados. Por supuesto, para ordenar también el script anterior, simplemente deje fuera el outfile.write(line)
y en su lugar, inmediatamente después del bucle, haga outfile.writelines(sorted(lines_seen))
.
Debe ejecutar la ordenación antes de ejecutar uniq porque uniq solo eliminará las líneas si son idénticas a la línea anterior. –
Sí, me referí a su respuesta, pero no reiteré que era un género seguido de uniq. –
+1 para esta solución. Una mejora adicional podría ser almacenar la suma md5 de la línea y comparar la suma md5 de la línea actual. Esto debería reducir significativamente los requisitos de memoria. (vea http://docs.python.org/library/md5.html) – joeslice
uniqlines = set(open('/tmp/foo').readlines())
esto le dará la lista de líneas únicas.
escritura que volver a algún archivo sería tan fácil como:
bar = open('/tmp/bar', 'w').writelines(set(uniqlines))
bar.close()
Es cierto, pero las líneas estarán en un orden aleatorio de acuerdo a cómo hash. –
¿cuál es el problema con las líneas no ordenadas? con respecto a la pregunta aquí ... – marcell
El problema con este código es que después de escribir, y la última línea no tiene un '\ n'. Luego, los resultados de salida tendrán una línea con 2 líneas fusionadas. – wmlynarski
conseguir todas sus líneas en la lista y crea un conjunto de líneas y ya está. por ejemplo,
>>> x = ["line1","line2","line3","line2","line1"]
>>> list(set(x))
['line3', 'line2', 'line1']
>>>
y escribir el contenido de nuevo al archivo.
Es cierto, pero las líneas estarán en un orden aleatorio según cómo hash. –
Aquí está mi solución
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 trazadores de líneas uno:
python -c "import sys; lines = sys.stdin.readlines(); print ''.join(sorted(set(lines)))" <InputFile> OutputFile
Usted puede hacer:
import os
os.system("awk '!x[$0]++' /path/to/file > /path/to/rem-dups")
Aquí se está utilizando bash en Python :)
También tiene otra manera:
with open('/tmp/result.txt') as result:
uniqlines = set(result.readlines())
with open('/tmp/rmdup.txt', 'w') as rmdup:
rmdup.writelines(set(uniqlines))
Es un refrito de cuál ya se ha dicho aquí - aquí lo que yo uso.
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()
añadir a la respuesta de @ David Locke, con sistemas * nix puede ejecutar
sort -u messy_file.txt > clean_file.txt
que creará clean_file.txt
la eliminación de duplicados en orden alfabético.
Si alguien está buscando una solución que utiliza un hash y es un poco más llamativo, esto es lo que actualmente utilizo:
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))
Esta función no es perfectamente eficiente como el hash se calcula dos veces, sin embargo, , Estoy bastante seguro de que el valor se almacena en caché.
- 1. Eliminar líneas duplicadas del archivo de texto?
- 2. Eliminación de líneas duplicadas en un archivo usando Java
- 3. Perl - Encontrar líneas duplicadas en un archivo o matriz
- 4. ¿Cómo puedo marcar/resaltar líneas duplicadas en el editor VI?
- 5. En vim, ¿cómo puedo eliminar todas las líneas en un archivo, excepto las últimas 100 líneas?
- 6. Eliminar filas duplicadas de un archivo grande en Python
- 7. ¿Cómo eliminar filas duplicadas del archivo plano utilizando SSIS?
- 8. Eliminar filas duplicadas (no eliminar todas las duplicadas)
- 9. Lista de C++ eliminar cadenas duplicadas
- 10. ¿Cómo puedo eliminar filas duplicadas en una tabla?
- 11. Eliminar entradas duplicadas usando un script Bash
- 12. Lote para eliminar filas duplicadas del archivo de texto
- 13. ¿Cómo puedo eliminar todas menos las últimas 10 líneas de un archivo?
- 14. ¿Listar solo líneas duplicadas basadas en una columna de un archivo delimitado por punto y coma?
- 15. Eliminar líneas que contienen la palabra clave de un archivo
- 16. Python: eliminar entradas duplicadas de CSV
- 17. ¿Cómo eliminar filas duplicadas con SQL?
- 18. Eliminar las primeras líneas X de un archivo PHP
- 19. Cómo eliminar palabras duplicadas de un archivo de texto plano usando comandos de Linux
- 20. ¿Cómo puedo comentar líneas PHP dentro de un archivo HTML?
- 21. Cómo eliminar líneas en un gráfico Matplotlib
- 22. Comando Linux o script que cuenta líneas duplicadas en un archivo de texto?
- 23. R, eliminar condicionalmente filas duplicadas
- 24. Eliminando líneas duplicadas contiguas en vi sin ordenar
- 25. eliminar las líneas vacías de archivo de texto con PowerShell
- 26. ¿Cómo puedo omitir líneas al sorber un archivo en Perl?
- 27. ¿Cómo eliminar las líneas adicionales vacías del archivo XML?
- 28. Buscar cadenas duplicadas en un archivo grande
- 29. ¿Cuál es la forma más rápida de eliminar líneas duplicadas en un archivo txt (y también algunas líneas que contienen cadenas específicas) utilizando python?
- 30. Eliminar las líneas duplicadas en parte por la columna y mantener el último
O simplemente ordene -u –