Как читать все имена изображений из каталога в python? [Дубликат]

Посмотрите документацию :

Обратите внимание, что исключение RuntimeException намеренно бросается в приложение, если не были получены достоверные аудио / видео данные, когда stop () называется. Это происходит, если stop () вызывается сразу после start (). Неисправность позволяет приложению предпринять соответствующие действия для очистки выходного файла (например, удалить выходной файл), поскольку выходной файл неправильно сконфигурирован, когда это произойдет.

Другими словами : Dalvik специально делает исключение. Вы должны обработать его для очистки после своего приложения. Вам придется обрабатывать его следующим образом:

private void stopRecording() {
    try{
        recorder.stop();
    }catch(RuntimeException stopException){
        //handle cleanup here
    }
    camera.lock();
}

67
задан vaultah 31 March 2018 в 11:46
поделиться

3 ответа

вы можете использовать всегда:

'C:/mydir'

это работает как в linux, так и в окнах. Другая возможность -

'C:\\mydir'

, если у вас есть проблемы с некоторыми именами, вы также можете попробовать сырые строковые литералы:

r'C:\mydir'

, однако лучше всего использовать функции модуля os.path которые всегда выбирают правильную конфигурацию для вашей ОС:

os.path.join(mydir, myfile)
112
ответ дан Aran-Fey 17 August 2018 в 09:41
поделиться
  • 1
    Спасибо, ребята, '/' отлично поработали, но другие подсказки оценены. – Gareth 1 June 2010 в 23:35
  • 2
    @Gareth, я очень ленив и часто обнаруживаю, что использую '/'. Однако в конечном итоге использование os.path более удобно. Он также позволяет вам использовать mydir и myfile в качестве переменных, которые вы можете легко изменить. – joaquin 1 June 2010 в 23:48
  • 3
    Единственное, что нужно делать с необработанными строками, это то, что они не могут закончиться \ – Douglas Leeder 29 June 2010 в 17:15
  • 4
    Вы можете использовать os.path.join (), чтобы удалить необходимость завершения путей с помощью \. – Will Ediger 5 August 2014 в 15:53
  • 5
    Мне нравится синтаксис r (raw string). Полезно, если вы копируете длинный путь, где обычно вам нужно заменить все обратные косые черты косой чертой – peterb 21 August 2016 в 05:07

Используйте модуль os.path.

os.path.join( "C:", "meshes", "as" )

Или используйте необработанные строки

r"C:\meshes\as"
12
ответ дан S.Lott 17 August 2018 в 09:41
поделиться
  • 1
    os.path.join может не вести себя так, как вы ожидаете, когда компонент является буквой диска, поскольку относительные пути разрешены даже тогда. (Результатом первой строки является «C: meshes \\ as» в Windows.) – dash-tom-bang 2 June 2010 в 00:04
  • 2
    Комментарий @ dash-tom-bang действительно важен. Правильно ли это сделать, чтобы положить "C:\" в качестве первой записи? Означает ли это, что из-за чистоты использования join? – Jack O'Connor 21 February 2014 в 02:53
  • 3
    @ JackO'Connor, вот что я делаю. Вы, конечно же, не хотите помещать "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 здесь здесь .

Существует множество способов борьбы с этим:

  1. Python будет не обрабатывать escape-последовательности в строковых литералах с префиксом r или R :
    >>> r'C:\meshes\as'
    'C:\\meshes\\as'
    >>> print(r'C:\meshes\as')
    C:\meshes\as
    
  2. Python в Windows также должен обрабатывать косые черты.
  3. используйте os.path.join ...
    >>> import os
    >>> os.path.join('C:', os.sep, 'meshes', 'as')
    'C:\\meshes\\as'
    
  4. ... или новый pathlib модуль
    >>> from pathlib import Path
    >>> Path('C:', '/', 'meshes', 'as')
    WindowsPath('C:/meshes/as')
    
5
ответ дан vaultah 17 August 2018 в 09:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: