在Python中将字符串转换为类对象

时间:2012-04-22 00:32:56

标签: python-3.x

我有一个字符串列表。列表的每个字符串具有相同的格式。我想将每个字符串转换为一个类对象(如果这是最好的选项),所以我可以对类对象列表进行一些分析。

举个例子,

我有以下列表

ls_list = ['-rw-r--r-- 1 ahmed None 0 Apr 21 17:10 bar1',
'-rw-r--r-- 1 ahmed None 0 Apr 21 17:10 bar2',
'-rw-r--r-- 1 ahmed None 0 Apr 21 17:10 foo1',
'-rw-r--r-- 1 ahmed None 0 Apr 21 17:10 foo2']

我想将上面的每个字符串转换为一个有九个成员(perm等)的类。

3 个答案:

答案 0 :(得分:2)

You don't want to do that.使用os.listdir()os.stat()获取您想要的信息。

答案 1 :(得分:0)

这是做你要求的一种方式,但正如其他人所说,不要用它来解析ls的输出。此外,它假定输入字符串中只有8个空格区域分隔您的数据。如果任何数据子字符串也包含空格,则此代码将失败:

class FileAttribs(object):

  ORDERED_ATTRIB_NAMES = ["permissions", "links", "owner", 
      "groups", "size", "month", "day", "time", "name"]

  def __init__(self, lsString):
    for (attrib, s) in zip(self.ORDERED_ATTRIB_NAMES, lsString.split()):
      setattr(self, attrib, s)

if __name__ == '__main__':
    ls_list = ['-rw-r--r-- 1 ahmed None 0 Apr 21 17:10 bar1', 
               '-rw-r--r-- 1 ahmed None 0 Apr 21 17:10 bar2', 
               '-rw-r--r-- 1 ahmed None 0 Apr 21 17:10 foo1', 
               '-rw-r--r-- 1 ahmed None 0 Apr 21 17:10 foo2']

    files = []
    for s in ls_list:
      files.append(FileAttribs(s))

    #do stuff with files, e.g.

    for f in files:
      print f.permissions, f.name

答案 2 :(得分:0)

你这样做:

import os

data = {}
for file in os.listdir('.'):
    data[file] = os.stat(file)

这为您提供了当前目录中所有文件的信息,作为您请求的对象。然后可以检查这些,您可以使用其他功能来确定您获得的用户ID的用户名等。