从 python 中的打印输出创建字典

create dictionary from a print output in python

我有一个 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'>

所以dict应该是这样的(日期时间格式需要规范)

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

似乎 listdir_attr() 输出也取决于底层服务器实现。如果您已经有了可打印格式,您可以尝试按 \t 拆分值,可​​以使用最后拆分的值作为您的键,倒数第二个将是您的值。您还可以将数据加载到 pandas 数据框中,并可以直接使用列名访问所需的字段。

SFTPClient.listdir_attr actually returns a list of SFTPAttrributes 个对象。您很可能可以访问上次修改的文件名和时间戳,如 attr.filenameattr.st_mtime(您可能需要将其从时间戳转换为人类可读的日期)。不幸的是,这些对象似乎是根据 os.stat 的结果创建的,这些对象在不同操作系统中并不总是 return 相同。您应该试验您计划在其上使用该软件的所有系统类型。

做这样的事情

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)

您可以执行以下操作

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