come esportare testo tra stringhe da file di testo


-1

Ho un lungo file di testo contenente descrizioni di prodotti come questi

Item code 104
Product name a
Description number 1
Description number 1 extra lines

Item code 108
Product name b
Description number 2

Vorrei esportare in file che prendono il nome da ciascun prodotto il testo che include il nome e la descrizione, solo il testo tra i codici articolo ma non i codici articolo stessi.

Nell'esempio sopra vorrei avere

file 1 a.txt contenente: nome prodotto una descrizione 1

file 2 b.txt contenente: nome prodotto b descrizione 2

Ho cercato online e ho trovato qualcosa di simile, ma non esattamente quello di cui ho bisogno. Il codice che ho trovato è nel seguente link .

La domanda si riferiva a numerosi file di testo, mentre ho bisogno di istanze multiple contenute nello stesso file e salvarle come nuovo file che prende il nome da una riga di ciò che è stato letto.


1
Mostra il "qualcosa di simile" che hai trovato e cosa deve cambiare per renderlo esattamente ciò di cui hai bisogno.
Mcalex,

Risposte:


0
#!/usr/bin/python 

import re

ITEM_NONE  = 0
ITEM_FOUND = 1

state = ITEM_NONE

out_file = None

with open('/tmp/data.txt','r') as f:
    for line in f.readlines():
        m = re.match(r'^Item code (\d+)$', line)
        if m:
            state = ITEM_FOUND
            out_file = open('/tmp/%d.txt' % int(m.group(1)), 'w')

        m = re.match(r'^$', line)
        if m:
            state = ITEM_NONE 
            out_file.close()

        if state != ITEM_NONE:
            out_file.write(line)

if out_file:
    out_file.close()

Ho eseguito il tuo codice su Python 2.7 e ho ricevuto il seguente erroreline 25, in <module> out_file.close() AttributeError: 'NoneType' object has no attribute 'close'
Julio Sitges il

Quindi hai una linea nera prima di una riga con 'Codice articolo xxx' - aggiungi un controllo simile come le ultime due righe alla linea 25 ... Capisci il codice sopra?
Jhilmer,

ha funzionato, ma ho dovuto modificare m = re.match(r'^$', line)per m = re.match(r'^xxx', line)non chiedermi perché. Inoltre, volevo che il file fosse chiamato dopo la seconda riga, e lo chiamasse come il primo.
Julio Sitges,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.