Python脚本用于汇总ls -l输出的值

时间:2016-02-07 21:37:35

标签: python unix dictionary ls

从其他帖子我可以读取ls -l的输出并仅过滤目录中的文件字节数。但是,我还想将所有这些值放入一个列表(数组)中,然后得到元素的总和。

我尝试创建一个列表b,然后只打印总和(b)。但是,当我想创建一个列表时,我会得到MemoryError。

现在的情况:

import subprocess
import csv
process = subprocess.Popen(['ls', '-l',], stdout=subprocess.PIPE)
stdout, stderr = process.communicate()

reader = csv.DictReader(stdout.decode('ascii').splitlines(), delimiter = ' ', skipinitialspace=True, fieldnames= ['Owner','Date','Dir','Priv','Bytes','Field2', 'Field3', 'Field4', 'Field5'])

问题从这里开始

for row in reader:
    a = row['Bytes']
    b = [int(a)]
    for i in b:
        b.append(i)
    continue
    print(b)

输出:

Traceback (most recent call last):
  File "script2.py", line 13, in <module>
    b.append(i)
MemoryError

任何帮助如何将所有元素放入一个列表然后得到总和将非常感激。谢谢!

2 个答案:

答案 0 :(得分:1)

要制作列表,您需要检查每行的行[&#39;字节&#39;]是否为空,如果不是,则转换为整数。一个很简洁的方法是使用列表理解:

list_of_sizes = [int(row['Bytes']) for row in reader if row['Bytes']]

或者,同样的事情,使用更传统的for循环:

list_of_sizes = []
for row in reader:
    if row['Bytes']:
        list_of_sizes.append(int(row['Bytes']))

然后,您可以使用sum函数计算总和:

total_size = sum(list_of_sizes)

答案 1 :(得分:0)

您正在迭代b列表并向其添加元素,它将永远不会停止。

for i in b:
    #b.append(i) #This is the problem
    #continue #Go to the next iteration
    print(i)

修改

for row in reader:
    a = row['Bytes']
    print(a)
    b.append(int(a))