Передать каждую часть списка в переменную в Python? - PullRequest
0 голосов
/ 26 июня 2018

У меня есть этот код, где выполняется поиск в основной папке вложенных папок с определенным расширением файла и открытие его в Python.

rootdir = '/path/to/dir' # path to your root directory you walk
sfiles = [] # a list with all the .shp files
for entry in os.listdir(rootdir):
    dirpath = os.path.join(rootdir, entry)
    if os.path.isdir(dirpath): 
        for file in os.listdir(dirpath): # Get all files in the subdirectories
            if file.endswith('.shp'): # If it's an .shp.
                filepath = os.path.join(dirpath, file)
                sfiles.append(filepath)
                fiona.open(filepath)

Теперь попробуйте назначить его

a=sfiles[0]
a.schema #method 
AttributeError: 'str' object has no attribute 'schema'

Ответы [ 2 ]

0 голосов
/ 26 июня 2018
filesList = list()
extension = "*.shp"
rootdir = '/path/to/dir'

for path, subdirs, files in os.walk(rootdir):
     for name in files:
        if fnmatch(name, extension):
             #filesList.append(os.path.join(path, name)) 
             with open(os.path.join(path, name), 'r') as fp:
                   #write your own logic here.

Если вы хотите добавить в список и хотите использовать то же самое в дальнейшем коде, используйте:

filesList.append(os.path.join(path, name))

, иначе вы можете напрямую использовать:

with open(os.path.join(path, name), 'r') as fp:

try:

a=sfiles[0]
a.schema()

# схема - это метод, который может быть причиной того, что вы получили ошибку, потому что пропустили "()".

0 голосов
/ 26 июня 2018

Если вы хотите вызвать метод, вам нужно использовать парантез, например:

a.schema()

Правильное сообщение об ошибке:

AttributeError: 'str' object has no attribute 'schema'

То, что вы добавляете к sfiles , это просто строки, и строки не содержат атрибута с именем 'схема' или метода с таким именем.

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

sfiles.append(fiona.open(filepath))

Опять же, не стоит открывать так много файлов одновременно. Может быть, найти файлы, как вы делаете сейчас, и открыть один файл сразу в более позднем цикле?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...