создать словарь из вывода на печать в Python - PullRequest
0 голосов
/ 02 мая 2018

У меня есть цикл for, внутри которого я печатаю каждую итерацию в цикле и выдает вывод в формате ls-lrt. Я хотел бы создать словарь из этого с ключом в качестве имени файла и значение в качестве метки времени.

for attr in sftp.listdir_attr('/abc'):
...     print attr
...
-rwxr-xr-x   1 7202711  7201853      5759 01 Mar 12:49 .nfs0000000615c569f500000004
-rw-r--r--   1 7202711  7201853     62394 26 Sep 2017  1.java
-rwxr-xr-x   1 7202711  7201853      5009 20 Aug 2017  a.sh
-rwxr-xr-x   1 7202711  7201853      2201 15 Oct 2017  adt.sh
drwxr-xr-x   1 7202711  7201853       282 09 Jun 2017  backup
-rwxr-xr-x   1 7202711  7201853      1384 27 Jul 2017  ob.sh

Если я сделаю

type(attr)

это дает мне

<class 'paramiko.sftp_attr.SFTPAttributes'>

Таким образом, дикт должен быть похож (формат даты и времени должен быть стандартизирован)

{'.nfs0000000615c569f500000004':'01 Mar 12:49',
                                  '1.java':'26 Sep 2017',..............etc}

Ответы [ 4 ]

0 голосов
/ 02 мая 2018

Вот что вы можете сделать

from collections import defaultdict
temp = defaultdict()
for file in sftp.listdir(PATH):
    temp[file].append(sftp.lstat(file)[X]) # where X is the column you want for as your value
0 голосов
/ 02 мая 2018

SFTPClient.listdir_attr фактически возвращает список SFTPAttrributes объектов. Вероятно, вы можете получить доступ к имени файла и отметке времени последней модификации как attr.filename и attr.st_mtime (вам, вероятно, потребуется преобразовать это из отметки времени в удобочитаемую дату). К сожалению, эти объекты, похоже, созданы на основе результатов os.stat, которые не всегда возвращают одно и то же в операционных системах. Вам следует поэкспериментировать со всеми типами систем, на которых вы планируете использовать это программное обеспечение.

0 голосов
/ 02 мая 2018

Сделай что-нибудь подобное

from time import gmtime, strftime

Обязательно импортируйте эти

d = {}
for attr in sftp.listdir_attr('/abc'):
    time_structer = gmtime(attr.st_mtime)
    d[attr.filename] = strftime("%a, %d %b %Y %H:%M:%S", time_structer)
0 голосов
/ 02 мая 2018

Кажется, listdir_attr() вывод также зависит от реализации базового сервера. Если у вас уже есть формат для печати, вы можете попытаться разделить значения на \t, возможно, используйте последнее разделенное значение в качестве вашего ключа, а второе последнее будет вашим значением. Также вы можете загрузить данные в pandas dataframe и получить прямой доступ к нужным полям с именами столбцов.

...