1

bar0,bar1,bar2...,bar20フォルダ ( ) にたくさんのファイル ( ) がありますfoo。各ファイルには 6000 行の形式があります

1   v1
2   v2
3   v3

などviはすべて整数です

フォルダ内のすべてのファイルを調べて、適切な位置の値を追加する単一のリストにデータをロードしたいと考えています。現在、私はこれをやっています

for i in range (20):
   fin = open('{dir}/ions{i}'.format(dir=self.locDir,i=i)).readlines()[:]
   for j in range (len(fin)):
       line = fin[j]
       words = line.split()
       x = int(words[0])
       y = int(words[0])
       if not x in self.ionDist.X:
          self.ionDist.X.append(x)
       if len(self.ionDist.Y) == j:
          self.ionDist.Y.append(0)
       self.ionDist.Y[j] += y

ionDist単純なクラスです

class dist:
    def __init__(self):
        self.X = []
        self.Y = []

ただし、これは非常に遅いです (このようなフォルダーが 80 個あり、毎回数分かかります)。これを行うためのより良い方法は何ですか?

4

1 に答える 1

1

あなたはself.Xを必要としないので、ここに私の解決策があります:

for i in range(20):
 fin = open('{dir}/ions{i}'.format(dir=self.locDir,i=i)).readlines()
 y = lambda(x:eval(x.strip().split()[1]),fin) 
 if len(y) > len(self.Y): self.Y = self.Y + [0]* (len(y) - len(self.Y))
 elif len(y) < len(self.Y): y = y + [0]*(len(self.Y) - len(y))
 self.Y = [ a+b for (a,b) in zip(self.Y,y)]

すべてのファイルの行数が同じ場合は、if、elif ステートメントも削除できます。

于 2013-07-04T14:03:56.217 に答える