To, co chcę zrobić, wydaje się względnie proste, ale dla mojego życia po prostu nie mogę tego zrozumieć. Mam plik .txt jakLista ciągów do liczb całkowitych przy zachowaniu formatu w pytonie
4 2
6 5 1
9 4 5
I chcę nim informacje mają być dostępne do mnie jak tak (to znaczy nie muszę pisać nowy plik .txt, chyba że byłoby to konieczne.) ...
lub, 1
jest odejmowany od każdej liczby, ale formatowanie pozostaje takie samo. Nigdy nie będzie liczby większej niż 1
w oryginale, więc negatywy nie będą możliwe. Cały ten ból głowy wynika z konwersji indeksowania na początek 0
zamiast 1
. Co może komplikować to, że oryginalne druki plików jak
['4 2 /n','6 5 1 /n', '9 4 5 /n']
co zrobiłem
Dobrze Jego miszmasz z different rzeczy mam found na StackOverflow, ale myślę, że jadę o tym w najbardziej niewygodny sposób. I this jeden nie ma sensu, kiedy wprowadziły go .. chociaż może być na tym samym torze z emisją ze spacjami ..
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]
mój proces myślowy był, muszę usunąć „/ n” i konwertować te ciągi na liczby całkowite, dzięki czemu mogę od nich odjąć 1
. I jakoś zachowaj formatowanie. Ważne jest, aby formatowanie było takie samo, ponieważ każda linia zawiera informacje o podobnie indeksowanej linii innego pliku. Nie chcę widzieć "/ n" w wyniku końcowym (lub instrukcji print), ale nadal chcę mieć wpływ na początek nowej linii. Powyższy kod jednak nie działa z dwóch powodów (które znam).
int(n[:])
zgłasza błąd, ponieważ nie odpowiada spacji i kiedy umieszczam tam wartość (np. 0), kod wypisuje pierwszy numer na każdej z linii i odejmuje jeden .. i umieszcza to wszystko w jednej linii.
[3, 5, 8]
Tak, wydaje się zbędny wykupienia powrotu karetki i rzucić w inny, ale trzeba zachować formatowanie, a także mają sposób, aby wszystkie numery!
To także nie działa:
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]
ale zamiast tylko złym wyjściem to był błąd:
ValueError:invalid literal for int() with base 10:''
Czy ktoś ma jakieś pomysły na to, co robię źle tutaj i jak to naprawić? Pracuję z Pythonem 2.6 i jestem początkującym.
Idealne, właśnie tego szukałem! Dziękuję za edytowanie ... było to bardziej specyficzne dla tego, czego potrzebowałem. – Ason
@Ason - Nie ma problemu. Ponownie przeczytałem twoją pocztę nieco ostrożniej i natknąłem się na linię, która mówiła, że nie potrzebujesz jej w nowym pliku, chyba że był to najprostszy sposób, aby to osiągnąć. Tak, zaktualizowałem. – mgilson
+1 Doceniam czas potrzebny na odpowiedź! – Ason