【问题标题】:create dictionary from a print output in python从python中的打印输出创建字典
【发布时间】:2018-10-12 20:58:23
【问题描述】:

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

【问题讨论】:

  • 请按照您创建此帐户时的建议阅读并遵循帮助文档中的发布指南。 Minimal, complete, verifiable example 适用于此。在您发布 MCVE 代码并准确描述问题之前,我们无法有效地帮助您。我们应该能够将您发布的代码粘贴到文本文件中并重现您描述的问题。
  • 文件名是 attr 吗?

标签: python python-2.7 paramiko


【解决方案1】:

SFTPClient.listdir_attr 实际上返回SFTPAttrributes 对象的列表。很可能您可以使用attr.filenameattr.st_mtime 访问上次修改的文件名和时间戳(您可能需要将其从时间戳转换为人类可读的日期)。不幸的是,这些对象似乎是根据os.stat 的结果创建的,它们在操作系统之间并不总是返回相同的东西。您应该对计划使用此软件的所有系统类型进行试验。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      你可以这样做

      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
      

      【讨论】:

        【解决方案4】:

        做这样的事情

        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)
        

        【讨论】:

        • 请随时edit您的回答,例如您可以将dict 替换为d
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-26
        • 1970-01-01
        • 2019-06-27
        • 1970-01-01
        • 2021-06-25
        • 2017-05-14
        相关资源
        最近更新 更多