Два возможных подхода.
1 / Я не думаю, что popen()
является частью стандарта C ++ (это часть POSIX из памяти), но он доступен для всех UNIX, с которыми я работал ( и вы, кажется, нацелились на UNIX, так как ваша команда «./some_command
»).
2 / В случае, если нет popen()
, вы можете использовать system( "./some_command >/tmp/some_command.out" ) ;
, затем использовать обычный Функции ввода / вывода для обработки выходного файла.
os.walk
дает вам путь к каталогу в качестве первого значения в цикле, просто используйте os.path.join()
для создания полного имени файла:
shpfiles = []
for dirpath, subdirs, files in os.walk(path):
for x in files:
if x.endswith(".shp"):
shpfiles.append(os.path.join(dirpath, x))
Я переименовал path
в цикле в dirpath
, чтобы не конфликтовать с переменной path
, которую вы уже проходили до os.walk()
.
Обратите внимание, что вам не нужно проверять, есть ли результат .endswith() == True
; if
уже делает это для вас, часть == True
полностью избыточна.
Вы можете использовать .extend()
и выражение генератора, чтобы сделать приведенный выше код немного более компактным:
shpfiles = []
for dirpath, subdirs, files in os.walk(path):
shpfiles.extend(os.path.join(dirpath, x) for x in files if x.endswith(".shp"))
или даже как одно понимание списка:
shpfiles = [os.path.join(d, x)
for d, dirs, files in os.walk(path)
for x in files if x.endswith(".shp")]
Кажется, os.path.abspath(finename)
будет работать. Попробуйте
shpfiles = []
for path, subdirs, files in os.walk(path):
for x in files:
if x.endswith(".shp") == True:
shpfiles.append(os.path.join(path, x))
abspath
будет содержать имя файла текущего каталога i>, который может быть совершенно иным путем.
– Martijn Pieters♦
9 May 2013 в 16:32
Почему бы не import glob
?
import glob
print(glob.glob('F:\OTHERS\PHOTOS\Panama\\mai13*\\*.jpg') )
, и я получаю все jpeg, которые я хочу, с абсолютным путем
>>>
['F:\\OTHERS\\PHOTOS\\Panama\\mai13\\03052013271.jpg',
'F:\\OTHERS\\PHOTOS\\Panama\\mai13\\05052013272.jpg',
'F:\\OTHERS\\PHOTOS\\Panama\\mai13\\05052013273.jpg']
glob()
поддерживает только фиксированную глубину подкаталогов, os.walk()
поддерживает произвольные глубины. См. . Как искать подпапки с помощью модуля glob.glob в Python?
– Martijn Pieters♦
9 May 2013 в 16:47