Думаю, у вас есть правильная идея. Структуры создаются для имитации типов данных. Они основаны на стоимости, а не на основе ссылок. Если вы посмотрите документацию MSDN для большинства базовых классов данных (int, double, decimal, ect.), Все они основаны на структурах. Тем не менее, однако, по этой же причине структуры не следует злоупотреблять. Комната для хранения всего всего в этой структуре выделяется сразу после ее создания, когда классы просто выделяют место для ссылки на все внутри. Если данные находятся в достаточно маленьких кусках, где это не проблема, а структуры - это путь. Если это проблема, обратитесь к классам. Если вы не знаете, как лучше всего придерживаться того, с чем вы знакомы.
вы можете использовать всегда:
'C:/mydir'
это работает как в linux, так и в окнах. Другая возможность -
'C:\\mydir'
, если у вас есть проблемы с некоторыми именами, вы также можете попробовать сырые строковые литералы:
r'C:\mydir'
, однако лучше всего использовать функции модуля os.path
которые всегда выбирают правильную конфигурацию для вашей ОС:
os.path.join(mydir, myfile)
Используйте модуль os.path
.
os.path.join( "C:", "meshes", "as" )
Или используйте необработанные строки
r"C:\meshes\as"
"C:\"
в качестве первой записи? Означает ли это, что из-за чистоты использования join
?
– Jack O'Connor
21 February 2014 в 02:53
"C:\"
в середину имени файла. Кроме того, вы можете использовать os.path.normpath
до или после соединения, чтобы убедиться, что путь печатается красиво.
– Agostino
7 April 2015 в 18:03
Да, \
в строковых литералах Python обозначает начало escape-последовательности. На вашем пути у вас есть действительная двухсимвольная escape-последовательность \a
, которая сжимается на символ one , который является ASCII Bell :
>>> '\a'
'\x07'
>>> len('\a')
1
>>> 'C:\meshes\as'
'C:\\meshes\x07s'
>>> print('C:\meshes\as')
C:\meshess
Другие общие escape-последовательности включают в себя \t
(вкладка), \n
(строка), \r
(возврат каретки):
>>> list('C:\test')
['C', ':', '\t', 'e', 's', 't']
>>> list('C:\nest')
['C', ':', '\n', 'e', 's', 't']
>>> list('C:\rest')
['C', ':', '\r', 'e', 's', 't']
Как вы можете видеть, во всех этих примерах обратная косая черта и следующий символ в литерале были сгруппированы вместе, чтобы сформировать единственный символ в финальной строке. Полный список управляющих последовательностей Python здесь здесь .
Существует множество способов борьбы с этим:
r
или R
: >>> r'C:\meshes\as'
'C:\\meshes\\as'
>>> print(r'C:\meshes\as')
C:\meshes\as
os.path.join
... >>> import os
>>> os.path.join('C:', os.sep, 'meshes', 'as')
'C:\\meshes\\as'
pathlib
модуль >>> from pathlib import Path
>>> Path('C:', '/', 'meshes', 'as')
WindowsPath('C:/meshes/as')