Quindi quello che voglio fare sembra relativamente semplice, ma per la vita di me, proprio non riesco a capirlo. Ho un file .txt comeElenco di stringhe a numeri interi mantenendo un formato in python
4 2
6 5 1
9 4 5
E voglio le proprie informazioni siano disponibili a me in questo modo (cioè non ho bisogno di scrivere un nuovo file .txt a meno che non sarebbe stato necessario.) ...
3 1
5 4 0
8 3 4
o, 1
viene sottratto da ogni numero ma la formattazione rimane la stessa. Non ci sarà mai un numero maggiore di 1
nell'originale, quindi i negativi non saranno possibili. L'intero mal di testa è dovuto alla conversione dell'indicizzazione per iniziare con 0
anziché 1
. Ciò che può complicare le cose è che il file viene stampato originali come
['4 2 /n','6 5 1 /n', '9 4 5 /n']
quello che ho fatto
Bene suo un miscuglio di cose che ho differentfound su StackOverflow, ma penso che ho intenzione su di esso nel modo più macchinoso possibile. E this non aveva senso quando ho realizzato che .. anche se può essere sulla stessa pista con la questione con spazi ..
origianl = open(file, 'r')
for line in original.readlines():
newline = line.replace(" \n","")
finalWithStrings.append(newline)
finalWithIntegers = [map(int,x) for x in finalWithStrings]
finalWithIntegers[:] = [x-1 for x in finalWithIntegers]
mio processo di pensiero è stato, ho bisogno di rimuovere il "/ n" e per convertire queste stringhe in numeri interi in modo da poter sottrarre 1
da loro. E in qualche modo mantenere la formattazione. È importante che la formattazione sia la stessa poiché ogni riga contiene informazioni sulla riga indicizzata in modo simile di un altro file. Non voglio vedere "/ n" nel risultato finale (o nell'istruzione di stampa) ma voglio comunque che inizi l'effetto di una nuova riga. Il codice sopra tuttavia, non funzionerà per due ragioni (che io sappia).
int(n[:])
genera un errore poiché non gli piacciono gli spazi e quando inserisco un valore (diciamo 0) li, quindi il codice stampa il primo numero su ciascuna delle linee e sottrae uno .. e mette tutto su una riga.
[3, 5, 8]
Così, sembra ridondante di stipulare un ritorno a capo e devono gettare un'altra, ma ho bisogno di mantenere la formattazione, così come hanno un modo per ottenere tutti i numeri!
Questa, inoltre, non ha funzionato:
for line in original.readlines():
newline = line.replace(" \n","")
finalWithStrings.append(newline)
finalWithIntegers = [map(int,x) for x in finalWithStrings]
finalWithIntegers[:] = [x-1 for x in finalWithIntegers]
ma invece di un'uscita sbagliata che fosse un errore:
ValueError:invalid literal for int() with base 10:''
Qualcuno ha tutte le idee su quello che sto facendo male qui e come risolvere questo? Sto lavorando con Python 2.6 e sono un principiante.
Perfetto, questo è esattamente quello che stavo cercando! Grazie per la modifica .. era più specifico di ciò di cui avevo bisogno. – Ason
@Ason - Nessun problema. Ho riletto il tuo post un po 'più attentamente e ho trovato la frase che diceva che non ti serviva in un nuovo file a meno che non fosse il modo più semplice per farlo. Quindi, ho aggiornato. – mgilson
+1 Apprezzo il tempo che hai impiegato per rispondere! – Ason