使用python将数据从几个文件加载到单个变量中

时间:2013-07-04 13:13:08

标签: python performance file-io io

我在文件夹(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个这样的文件夹,每次需要几分钟)。有什么更好的方法呢?

1 个答案:

答案 0 :(得分: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语句。