0

文字列のリストがあります。リストの各文字列は同じ形式です。各文字列をクラス オブジェクトに変換したいので (それが最適なオプションである場合)、クラス オブジェクトのリストを分析できます。

例として、

次のリストがあります

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']

上記の各文字列を、9 つのメンバー (perm など) を持つクラスに変換したいと思います。

4

3 に答える 3

2

あなたはそれをしたくありません。と を使用os.listdir()os.stat()て、必要な情報を取得します。

于 2012-04-22T01:44:37.820 に答える
0

これがあなたが求めることを行う1つの方法ですが、他の人が指摘しているように、これを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
于 2012-04-22T01:06:03.807 に答える
0

あなたはそれを次のようにします:

import os

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

これにより、要求に応じて、現在のディレクトリ内のすべてのファイルの情報がオブジェクトとして提供されます。次に、これらを検査し、他の関数を使用して、取得したユーザーIDのユーザー名などを把握できます。

于 2012-04-22T05:18:04.163 に答える