Tengo el siguiente código que lee varios archivos, analiza las líneas obtenidas e imprime el resultado:
import os import re files=[] pars=[] for i in os.listdir('path_to_dir_with_files'): files.append(i) for f in files: with open('path_to_dir_with_files'+str(f), 'r') as a: pars.append(re.sub('someword=|\,.*|\#.*','',a.read())) for k in pars: print kPero tengo un problema con varias líneas nuevas en la salida:
test1 test2En lugar de eso, quiero obtener el siguiente resultado sin líneas vacías en la salida:
test1 test2y así.
Intenté jugar con expresiones regulares:
pars.append(re.sub('someword=|\,.*|\#.*|^\n$','',a.read()))Pero no funciona. También probé usando strip() y rstrip() incluyendo replace. Tampoco funciona.
Puede usar una segunda expresión regular para reemplazar varias líneas nuevas con una sola línea nueva y usar strip para deshacerse de la última línea nueva.
import os import re files=[] pars=[] for i in os.listdir('path_to_dir_with_files'): files.append(i) for f in files: with open('path_to_dir_with_files/'+str(f), 'r') as a: word = re.sub(r'someword=|\,.*|\#.*','', a.read()) word = re.sub(r'\n+', '\n', word).strip() pars.append(word) for k in pars: print kSin cambiar mucho su código, una manera fácil sería verificar si la línea está vacía antes de imprimirla, por ejemplo:
import os import re files=[] pars=[] for i in os.listdir('path_to_dir_with_files'): files.append(i) for f in files: with open('path_to_dir_with_files'+str(f), 'r') as a: pars.append(re.sub('someword=|\,.*|\#.*','',a.read())) for k in pars: if not k.strip() == "": print k*** EDITAR Dado que cada elemento en pars es en realidad todo el contenido del archivo (no solo una línea), debe reemplazar cualquier línea de doble final, lo más fácil de hacer con re
import os import re files=[] pars=[] for i in os.listdir('path_to_dir_with_files'): files.append(i) for f in files: with open('path_to_dir_with_files'+str(f), 'r') as a: pars.append(re.sub('someword=|\,.*|\#.*','',a.read())) for k in pars: k = re.sub(r"\n+", "\n", k) if not k.strip() == "": print kTenga en cuenta que esto no se ocupa del caso en el que un archivo termina con una nueva línea y el siguiente comienza con uno; si ese es un caso que le preocupa, necesita agregar lógica adicional para manejarlo o cambiar la forma en que estoy leyendo los datos en
solo uno simple, pero puede no ser eficiente.
entire_file = "whatever\nmay\n\n\n\nhappen" while '\n\n' in entire_file: entire_file = entire_file.replace("\n\n", "\n") print(entire_file)