用于对 ls -l 输出中的值求和的 Python 脚本

标签 python unix dictionary ls

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

我尝试创建一个列表 b,然后仅打印 sum(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

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

最佳答案

要创建列表,您需要检查每行的 row['Bytes'] 是否为空,如果不是,则转换为整数。一个简洁的方法是使用列表理解:

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)

关于用于对 ls -l 输出中的值求和的 Python 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35259423/

相关文章:

c# - 如何优化使用 Dictionary<string, class> 的代码

python - 删除字符串列表中第一次出现 X 之前的所有内容

python - Opencv在Python中检测四边形

python - 创建一个 RPG 游戏宝箱

c++ - 使用unix下载html文件

java - 如何使用新的computeIfAbsent函数?

java - 双向 map

python - 从散点图框更改为密度图框会导致错误

linux - 如何协调两个linux进程以两步锁步计划运行?

linux - NonGUIDriver com.thoughtworks.xstream.io.StreamException 中的错误