Сделать метод readline для Python распознавать как варианты конца строки?

Я пишу файл Python, который нужно читать в нескольких файлах разных типов. Я читаю файлы в f = open("file.txt", "r") последовательности с традиционными for line in f после использования f = open("file.txt", "r") .

Кажется, что это не работает для всех файлов. Я предполагаю, что некоторые файлы заканчиваются разными кодировками (например, \ r \ n против просто \ r). Я могу прочитать весь файл и разбить строку на \ r, но это очень дорого, и я бы предпочел. Есть ли способ сделать метод readline для Python распознавать как варианты конца строки?

2 Solutions collect form web for “Сделать метод readline для Python распознавать как варианты конца строки?”

Используйте универсальную поддержку новой строки – см. http://docs.python.org/library/functions.html#open

В дополнение к стандартным режимам fopen () может быть «U» или «rU». Python обычно создается с поддержкой универсальной новой строки; снабжение «U» открывает файл в виде текстового файла, но строки могут быть прерваны одним из следующих: соглашение окончательной строки Unix '\ n', соглашение Macintosh '\ r' или соглашение Windows '\ г \ п». Все эти внешние представления рассматриваются как «\ n» в программе Python. Если Python построен без универсальной поддержки новой строки, режим с «U» совпадает с обычным текстовым режимом. Обратите внимание, что открытые таким образом файловые объекты также имеют атрибут newlines, который имеет значение None (если новые символы еще не были просмотрены), '\ n', '\ r', '\ r \ n' или кортеж, содержащий все вид новых линий.

Вы можете попробовать использовать генераторный подход для чтения строк самостоятельно и игнорировать любые символы EOL:

 def readlines(f): line = [] while True: s = f.read(1) if len(s) == 0: if len(line) > 0: yield line return if s in ('\r','\n'): if len(line) > 0: yield line line = [] else: line.append(s) for line in readlines(yourfile): # ... 
Python - лучший язык программирования в мире.