Список строк в целые числа с сохранением формата в python

Итак, то, что я хочу сделать, кажется относительно простым, но, что бы я ни делал, я просто не могу этого понять. У меня есть файл.txt, например

4 2
6 5 1
9 4 5

И я хочу, чтобы его информация была мне доступна вот так (, т.е. мне не нужно писать новый файл.txt, если в этом нет необходимости. )...

3 1
5 4 0
8 3 4

или 1вычитается из каждого числа, но форматирование остается прежним. В оригинале никогда не будет числа больше, чем 1, поэтому отрицательные значения невозможны. Вся эта головная боль связана с тем, что индексация начинается с 0вместо 1. Что может усложнить ситуацию, так это то, что исходный файл печатается как

['4 2 /n','6 5 1 /n', '9 4 5 /n']

Что я сделал

Что ж, это мешанина из различных вещей, которые я нашел на StackOverflow, но я думаю, что делаю это максимально громоздким способом. И этот не имел смысла, когда я его реализовывал.. хотя он может быть на том же пути, что и проблема с пробелами..

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]

Мой мыслительный процесс был,Мне нужно удалить «/n» и преобразовать эти строки в целые числа, чтобы я мог вычесть из них 1. И как-то сохранить форматирование. Важно, чтобы форматирование было одинаковым, поскольку каждая строка содержит информацию о аналогично проиндексированной строке другого файла. Я не хочу видеть "/n" в конечном результате (или операторе печати ), но я все еще хочу, чтобы эффект начала новой строки. Однако приведенный выше код не будет работать по двум причинам (, о которых я знаю ).

int(n[:])выдает ошибку, так как ему не нравятся пробелы, и когда я помещаю туда значение (, скажем, 0 ), тогда код печатает первое число в каждой из строк и вычитает один... и помещает все это в одна линия.

[3, 5, 8]

Таким образом, кажется излишним вынимать возврат каретки и вставлять другой, но мне нужно сохранить форматирование, а также иметь способ получить все числа!

Это тоже не сработало:

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]    

но вместо просто неправильного вывода была ошибка:

ValueError:invalid literal for int() with base 10:''

У кого-нибудь есть идеи о том, что я делаю неправильно здесь и как это исправить? Я работаю с Python 2.6 и начинаю.

5
задан Community 23 May 2017 в 10:24
поделиться