2011-04-26 11 views
7

tengo lo siguiente en un archivo de texto:¿Cómo puedo combinar varias líneas de texto en una línea en Python con un delimitador para separarlas?

line1 
text1 
text2 
text3 
line2 
something1 
something2 

quiero crear otro archivo de texto que se parece a esto:

line1|text1|text2|text3 
line2|something1|something2 

Cada vez que una línea en el archivo de texto dice "línea" Quiero para agregar cada línea debajo de esa línea con '|' delimitador. ¿Puedo hacer esto en Python?

Respuesta

4

Si el archivo no es extremadamente grande

data=open("file").readlines() 
for n,line in enumerate(data): 
    if line.startswith("line"): 
     data[n] = "\n"+line.rstrip() 
    else: 
     data[n]=line.rstrip() 
print '|'.join(data) 
1
current = None 
parts = [] 
with open('input', 'rb') as f: 
    for line in f: 
     if line.startswith('line'): 
      current = [line.strip()] 
      parts.append(current) 
     elif current is not None: 
      current.append(line.strip()) 

with open('output', 'w+b') as f: 
    f.write('\n'.join(('|'.join(part) for part in parts))) 
4

Aquí hay una sola línea que utiliza line1, line2, ... sin tener que leer el número de esa línea:

['|'.join(['line%d' % i] + x.strip('\n').split('\n')) for i, x in enumerate(re.split('line[0-9]+', l)) if x.strip('\n')] 
+0

+1 porque esta es la única respuesta de una línea proporcionada –

2
def join_lines(lines, sent='line'): 
    current = [] 
    for line in lines: 
     if line.startswith(sent): 
      yield current 
      current = [] 

     current.append(line) 
    yield current 

# data = open('input.txt', 'rt') 
data = """line1 
text1 
text2 
text3 
line2 
something1 
something2""".splitlines() 

print ['|'.join(line) for line in join_lines(data) if line] 
Cuestiones relacionadas