После моего поста я мог оторвать взгляд от своего кода, и я действительно заметил, что изменение данных, скопированных из файла и переданных в raw_input () , такое же, как и изменение новых строк в Python выполняет, когда он читает данные непосредственно в файл, что подтверждается здесь:
with open("TestWindows.txt", 'wb') as f:
f.write("PACIFIC \r ARCTIC \n ATLANTIC \r\n ")
print "\n- Following string have been written in TestWindows.txt in mode 'wb' :\n"+\
"PACIFIC \\r ARCTIC \\n ATLANTIC \\r\\n "
print "\n- data got by reading the file TestWindows.txt in 'rb' mode :"
with open("TestWindows.txt", 'rb') as f:
print " repr(data)==",repr(f.read())
print "\n- data got by reading the file TestWindows.txt in 'r' mode :"
with open("TestWindows.txt", 'r') as f:
print " repr(data)==",repr(f.read())
print "\n- data got by reading the file TestWindows.txt in 'rU' mode :"
with open("TestWindows.txt", 'rU') as f:
print " repr(data)==",repr(f.read())
результат:
- Following string have been written in TestWindows.txt in mode 'wb' :
PACIFIC \r ARCTIC \n ATLANTIC \r\n
- data got by reading the file TestWindows.txt in 'rb' mode :
repr(data)== 'PACIFIC \r ARCTIC \n ATLANTIC \r\n '
- data got by reading the file TestWindows.txt in 'r' mode :
repr(data)== 'PACIFIC \r ARCTIC \n ATLANTIC \n '
- data got by reading the file TestWindows.txt in 'rU' mode :
repr(data)== 'PACIFIC \n ARCTIC \n ATLANTIC \n '
Во-первых, файл PASTED.txt имеет то же содержимое, что и файл PRIM.txt , в результате копирования и вставки содержимого PRIM.txt это в PASTED.txt без перехода в строку Python. Таким образом, когда данные передаются из файла в другой файл, проходя только через буфер обмена, они не изменяются. Этот факт доказывает, что содержимое PRIM.txt не повреждено в буфере обмена, куда копируются данные.
Во-вторых, данные, передаваемые из файла в строку Python через буфер обмена, и raw_input () модифицируется; следовательно, изменение происходит между буфером обмена и строкой Python. Поэтому я подумал, что raw_input () может выполнять ту же интерпретацию данных, полученных из буфера обмена, что и интерпретатор Python, когда он получает данные из чтения файла.
Затем я вышил на мысль, что замена \ r \ n на \ n связана с тем, что данные «природы Windows» становятся данными «Природа Python» и то, что буфер обмена не вносит изменения в данные, поскольку он является частью под управлением операционной системы Windows.
Увы, тот факт, что данные скопированы с экрана и переданы в raw_input () , не подвергается преобразованию строк новой строки \ r \ n , несмотря на то, что эти данные проходит через буфер обмена Windows, ломает мою крошечную концепцию.
Тогда я подумал, что Python знает природу данных не по их источнику, а по информации, содержащейся в данных; такая информация является «форматом». Я нашел следующую страницу, касающуюся буфера обмена Windows, и действительно есть несколько форматов информации, записанной в буфере обмена:
http://msdn.microsoft.com/en-us/library/ms648709(v=vs.85).aspx
Возможно, объяснение модификации \ r \ n Python связано с этими форматами, существующими в буфере обмена, а может и нет. Но я недостаточно разбираюсь во всем этом беспорядке, и я далеко не уверен.
Кто-нибудь может объяснить все вышеперечисленные наблюдения?
.
.
Спасибо за ваш ответ, ncoghlan. Но я не думаю, что это причина:
sys.stdin не имеет атрибута mode
sys.stdin относится к клавиатуре, насколько я понимаю. Тем не менее, в моем коде данные поступают не от набора текста на клавиатуре, а от вставки через буфер обмена. Это другое.
Ключевым моментом является то, что я не понимаю, как интерпретатор Python может отличать данные, поступающие из буфера обмена, скопированные из файла, и данные, поступающие из буфера обмена, скопированные с экрана