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 回答