从python中的df -h输出中选择特定列

use*_*085 8 python unix parsing

我正在尝试创建一个简单的脚本,它将从unix df - h命令中选择特定的列.我可以用awk来做这个但是我们怎么能在python中做到这一点?

这是df -h输出:

Filesystem                    Size  Used  Avail  Use%  Mounted on
/dev/mapper/vg_base-lv_root   28G   4.8G    22G   19%  /
tmpfs                        814M   176K   814M    1%  /dev/shm
/dev/sda1                    485M   120M   340M   27%  /boot

我想要的东西:

第1栏:

Filesystem
/dev/mapper/vg_base-lv_root           
tmpfs                 
/dev/sda1

第2栏:

Size
28G
814M 
485M   

Gil*_*il' 11

您可以使用op.popen运行命令和检索它的输出,然后splitlinessplit分割线和领域.如果列太长,则运行df -Phdf -h不是分割线.

df_output_lines = [s.split() for s in os.popen("df -Ph").read().splitlines()]
Run Code Online (Sandbox Code Playgroud)

结果是一个行列表.要提取第一列,您可以使用[line[0] for line in df_output_lines](请注意,列从0开始编号),依此类推.您可能希望使用df_output_lines[1:]而不是df_output_lines去除标题行.

如果您已将输出df -h存储在某个文件中,则需要先加入这些行.

fixed_df_output = re.sub('\n\s+', ' ', raw_df_output.read())
df_output_lines = [s.split() for s in fixed_df_output.splitlines()]
Run Code Online (Sandbox Code Playgroud)

请注意,这假定文件系统名称和安装点都不包含空格.如果他们这样做(这可能在一些unix变体上有一些设置),实际上df甚至不可能解析输出df -P.您可以使用os.statvfs来获得(这是Python接口上给定的文件系统信息的C函数df在内部对每个文件系统调用),但有枚举的文件系统没有可移植的方法.