我在当前工作目录中模拟了这样的目录:
WorkDirectory/500kstp
WorkDirectory/1mstp
WorkDirectory/1.5mstp
....
WorkDirectory/20mstp
我希望数组的元素具有如下值:
dirs[0]='500kstp'
dirs[1]='1mstp'
dirs[2]='1.5mstp'
dirs[3]='2mstp'
dirs[4]='2.5mstp'
....
dirs[19]='20mstp'
我正在学习Python。我注意到如果要列出,排序和重新排列目录,Python脚本会很复杂。如果使用Perl,下面显示的四个命令可以实现它。
my $line=`ls|grep stp|sort -n`;chomp($line);
my @dirs=split(/\r?\n/,$line);
$_=pop(@dirs);
unshift(@dirs,$_);
但是,在python中,它看起来非常复杂,因为Python必须调用某些复杂的模块。有什么简单的方法可以调用Bash脚本将输出保存到字符串中?
答案 0 :(得分:1)
要获取目录的内容并查找包含特定字符串的条目,可以执行以下操作:
dirs = [f for f in os.listdir('.') if 'stp' in f]
如果要按字符串排序,则可以:
dirs = sorted(f for f in os.listdir('.') if 'stp' in f)
要将条目按数字排序,可以执行以下操作:
def numericKey(s):
m = re.search('([^\d]*)(\d+(?:\.\d+)?)(.*)', s)
if m:
return m.group(1), float(m.group(2)), m.group(3)
else:
return (s,)
dirs = sorted((f for f in os.listdir('.') if 'stp' in f), key=numericKey)
编辑: 按其他地方指出的那样按k和m缩放数字,您可以执行以下操作:
import os, re
def numericKey(s):
m = re.search('([^\d]*)(\d+(?:\.\d+)?)([mk]?)(.*)', s)
if m:
scale = dict(m=1e6, k=1e3).get(m.group(3), 1)
return m.group(1), float(m.group(2))*scale, m.group(4)
else:
return (s,)
dirs = sorted((f for f in os.listdir('.') if 'stp' in f), key=numericKey)