2016-04-12 2 views
1

Итак, я пытаюсь прочитать второе в последнем номере в файле. Мой код выглядит следующим образом:Отрицательный поиск python

file = open("file.txt", "rb") 
print (file.seek(-2, 2)) 
file.close() 

Содержимое моего файла следующим образом:

1,2,1,1,2,0,1,1,2,1,1,1,0,0,0,0,1,2,0,0,0,1,0,1,1,0,0,0,1,0,0,2,1,1, 

Я ожидал, что программа для печати «1», но на самом деле печатает «3» Кто-нибудь знает, почему это есть и как это исправить? Благодаря!

+1

Пожалуйста, четко, что вы хотите сделать и с какой проблемой вы сталкиваетесь. – kanayamalakar

+0

Кажется странным, что это будет печатать 3 вместо большего числа. Был ли ваш фактический файл меньше этого? – user2357112

ответ

1

Следует отметить, что seek работает со смещением символов (или байтов в двоичном режиме). Каждая запятая, разделяющая числа в вашем примере, будет считаться символом (или байтом в вашем случае, так как вы открыли в двоичном режиме). Для того, чтобы прочитать второй к последнему номеру в примере вы предоставили, вам нужно будет искать назад 4-х символы (2 номера и 2 запятые, так как файл заканчивается запятая), а затем чтения одного символом

f.seek(-4, 2) 
r.read(1) 

Поймите, что это не сработает, если какое-либо из чисел больше 1 цифры. Глядя на ваш файл, он, похоже, не написан в двоичном формате, поэтому его открытие в двоичном режиме не имеет большого смысла. Если файл достаточно мал, чтобы поместиться в памяти, было бы проще и менее подвержен ошибкам, чтобы прочитать весь файл, а затем разобрать его, чтобы получить второе к последнему номеру

number = int(f.read().strip(',').split(',')[-2]) 
+0

Можете вы добавить цифры в файл, используя это? Например: добавление = f.seek (-4, 2) + f.seek (-3, 2), а затем печать: печать (добавление) – ghehgoo

+0

Уже сказано, что 'seek' не возвращает символ при этом должность. Он возвращает позицию, и не очень полезно добавлять индексы позиции. –

2

Возвращаемое значение seek ничего не читает из файла. На Python 2 возвращаемое значение равно None; на Python 3 возвращаемое значение представляет собой число, представляющее новую абсолютную позицию в файле, что может не соответствовать количеству байтов или символов из начала файла в текстовом режиме.

Если вы хотите прочитать персонажа после поиска, позвоните по телефону file.read(1).

Смежные вопросы