2014-04-06 3 views
4

В чем разница между методом чтения Python() и методом класса Java Scanner nextLine()?Разница между python readline() и классом сканера Java nextLine()

nextLine() ищет символ-разделитель следующей строки, которая может быть нечто иное, чем «\ п», как написано здесь:

http://docs.oracle.com/javase/7/docs/api/ java/util/Scanner.html # nextLine()

Выполняет ли метод readline() Python то же самое? Это важно, потому что у моего файла могут быть другие разделители строк, но мне нужно искать именно новый символ линии.

Любые идеи?

ответ

1

Вы должны проверить его самостоятельно.

Я тестировал его на консоли с помощью f.readline(), и он читается до \n, даже если у меня есть \r в строке.

>>> f.readline() 
'This is a test\n' 
>>> f.readline() 
'Second line\rwith char\n' 
>>> f.readline() 
'Third line' 

Примечание: Некоторые странные вещи могут произойти, если вы просто распечатать для чтения линии на питон скрипт. Но если вы используете repr(str), вы увидите все \n и \r.

+0

Спасибо, но это не учитывает набор всех возможных разделителей строк. Существуют разделители строк unicode, которые не так хорошо известны, как новый символ строки. – kolonel

1

Прежде всего, вы сравниваете яблоко с апельсинами. Scanner - это не эквивалент Java файлового объекта python. BufferedReaderявляется эквивалент, и в самом деле, если вы посмотрите на документацию nextLine метода в BufferedReader:

Считывает строку текста. Линия считается завершенной любым линии подачи ('\n'), возвратом каретки ('\r') или возвратом каретки , за которым следует прямая передача.

Python делает this тоже:

Манера интерпретации текстовых потоков, в которых все следующие распознаются как окончание строки: конец-строки Юникса '\n', винда соглашение '\r\n', и старый договор Macintosh '\r'. См. PEP 278 и PEP 3116, а также str.splitlines() для дополнительного использования .


AFAIK питон не обеспечивает общественных эквивалента в Java Scanner. Но там is a (недокументированный) re.Scanner, который можно использовать для достижения того, чего вы хотите. Вы просто предоставляете «лексикон» при создании экземпляра, а затем вызываете метод scan.

Возможно, самый простой способ добиться того, что вы хотите, - прочитать файл в кусках и разбить его, используя re.split.

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