Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 8, 2013 18:23:42

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

Тема для разговоров

Lexander
Если бы не IIS, то конечно.
Система, которая пишет символ конца файла в средине файла.
Как это еще назвать?

Да, если учесть, что логи предназначены для анализа человеком, то точно бинарных данных не должно
быть
Lexander
Если бы не IIS, то конечно.
ИСС тут не при чём, логи наш сервак пишет, там хоть ИСС, хоть апач, всё равно так же будет

В каком случае текстовый режим чтения файла предпочтительнее, чем бинарный?



Отредактировано Budulianin (Ноя. 8, 2013 18:26:31)

Офлайн

#2 Ноя. 9, 2013 01:45:54

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Тема для разговоров

Budulianin
В каком случае текстовый режим чтения файла предпочтительнее, чем бинарный?
Я там выше отписался, когда нужна независимость от платформы (\r, \n, \r\n).



Офлайн

#3 Ноя. 9, 2013 05:13:14

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

Тема для разговоров

Lexander
Я там выше отписался, когда нужна независимость от платформы (\r, \n, \r\n).
Спасибо, не заметил

Разве бинарный режим не будет одинаково работать на разных платформах ?



Офлайн

#4 Ноя. 9, 2013 07:58:42

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9873
Репутация: +  853  -
Профиль   Отправить e-mail  

Тема для разговоров

Budulianin
Разве бинарный режим не будет одинаково работать на разных платформах ?
текстовый режим приводит содержимое файла к одному и тому же виду при чтении
перевод строки превращается в \n, какой бы он там ни был в файле
при записи выполняется то же преобразование
это из C пошло



Офлайн

#5 Ноя. 9, 2013 13:06:58

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

Тема для разговоров

py.user.next
текстовый режим приводит содержимое файла к одному и тому же виду при чтении
перевод строки превращается в \n, какой бы он там ни был в файле
при записи выполняется то же преобразование
это из C пошло

Т.е. при чтении в текстовом режиме, все символы конца строки будут заменены на \n
При чтении в бинарном режиме, символы конца строки остаются нетронутыми

Попробовал читать файлы созданные в винде, в разных режимах

При чтении файла из винды \r\n в конце каждой строки, хоть бинарный режим, хоть текстовый, замены на \n не происходит при чтении в текстовом режиме



Офлайн

#6 Ноя. 9, 2013 17:18:34

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Тема для разговоров

Budulianin
Т.е. при чтении в текстовом режиме, все символы конца строки будут заменены на \n
Не заменены, а распознаны именно как символ окончания строки.
Если бы этого не было, то, например, читая на Маке лог, записанный под Вин, у вас 2-я и дальше строки начинались бы с символа \n



Офлайн

#7 Ноя. 9, 2013 18:52:30

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9873
Репутация: +  853  -
Профиль   Отправить e-mail  

Тема для разговоров

Lexander
Не заменены, а распознаны именно как символ окончания строки.
заменены
то есть,
если у тебя в файле \r\n, то при чтении такой строки эти два символа заменятся на \n (если дело под виндой происходит)
если у тебя в файле \r, то при чтении такой строки этот один символ заменится на \n (если дело под маком происходит)
а при записи - обратно: \n -> \r\n (под виндой), \n -> \r (под маком)

я проверил в лине, он распознаёт виндовые при чтении, но при записи он что будет делать ? правильно, ничего не будет делать, потому что в лине перевод строки - \n

а в C даже \r\n не распознает в лине и не заменит, потому что в лине перевод строки - \n
то есть это фишка питона, что он может виндовые переводы под линем распознавать

Budulianin
При чтении файла из винды \r\n в конце каждой строки, хоть бинарный режим, хоть текстовый, замены на \n не происходит при чтении в текстовом режиме
всё проверил



Отредактировано py.user.next (Ноя. 9, 2013 19:15:43)

Прикреплённый файлы:
attachment crlf.tar.bz2 (398 байт)

Офлайн

#8 Ноя. 9, 2013 22:50:42

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

Тема для разговоров

Эти файлы ты записал на винде, правильно?

Сначала ты сохранил в текстовом режиме, он перевёл \n -> \r\n т.к. винда

Потом ты считал этот текст в режиме чтения и показал, как Python видит у себя эту строку, т.е. он изменил \r\n -> \n

Потом ты считал этот файл в бинарном режиме и показал, что в строке \r\n , т.к. режим бинарный и Python считал т.к. есть без преобразований

Budulianin
Попробовал читать файлы созданные в винде, в разных режимах
При чтении файла из винды \r\n в конце каждой строки, хоть бинарный режим, хоть текстовый, замены на \n не происходит при чтении в текстовом режиме

Это я на Linux читал файл сохранённый в винде. Поэтому он и не преобразовал \r\n -> \n т.к. такое только в винде работает. Но Python распознаёт в Linux \r\n как символ окончания строки, поэтому нормально работает с таким файлом из винды.

Всё правильно понял?



Офлайн

#9 Ноя. 10, 2013 21:03:46

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9873
Репутация: +  853  -
Профиль   Отправить e-mail  

Тема для разговоров

Budulianin
Эти файлы ты записал на винде, правильно?
ну, да

Budulianin
Потом ты считал этот текст в режиме чтения
в текстовом режиме
есть два режима: текстовый и бинарный
текстовый может проводить изменения над данными (неважные для чтения человеком, типа пробелы в конце строк удалять и так далее), бинарный не может проводить изменения над данными

Budulianin
режим бинарный и Python считал т.к. есть без преобразований
“так как” в данном случае нельзя сократить, потому что там есть запятая между словами

“ т.к. режим бинарный и Python считал так, как есть, - без преобразований”

Budulianin
Это я на Linux читал файл сохранённый в винде. Поэтому он и не преобразовал \r\n -> \n т.к. такое только в винде работает.
в питоне они просто распознаются все (в файловом объекте, по-моему, сохраняются все виды встретившихся переводов в кортеже)
в то время как в линукс, в редакторах возвраты каретки не удаляются, а считаются частью строки
поэтому скрипт для bash, созданный в винде, в лине выдаёт ошибку с символом ^M
и, наоборот, текстовый файл, созданный в лине, в виндовом блокноте открывается в виде одной строки с квадратиками



Офлайн

#10 Ноя. 10, 2013 21:18:07

Budulianin
От:
Зарегистрирован: 2011-10-18
Сообщения: 1218
Репутация: +  33  -
Профиль   Отправить e-mail  

Тема для разговоров

py.user.next

Ну теперь всё стало ясно, спасибо.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version