Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 是否有一种简单的方法可以将目录列表、排序和保存为字符串?_Python - Fatal编程技术网

Python 是否有一种简单的方法可以将目录列表、排序和保存为字符串?

Python 是否有一种简单的方法可以将目录列表、排序和保存为字符串?,python,Python,我在当前工作目录中有如下模拟目录: WorkDirectory/500kstp 工作总监/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。我注意到,如果要列出、排

我在当前工作目录中有如下模拟目录:

WorkDirectory/500kstp
工作总监/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脚本以将输出保存到字符串中的任何简单方法?

要获取目录内容并查找包含特定字符串的条目,可以执行以下操作:

dirs = [f for f in os.listdir('.') if 'stp' in f]
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)
如果要按字符串对其排序,则应执行以下操作:

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来缩放数字,您可以执行以下操作:

dirs = [f for f in os.listdir('.') if 'stp' in f]
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)

chomp(my@dirs=`ls | grep stp | sort-n`)重新“
$\=pop(@dirs);取消移位(@dirs,$);
”,嗯?你为什么把最后一个条目放在第一位?把它排序。我需要分析时间序列中的数据。哦,我明白了,这是对错误排序的错误修复。你的Perl版本是非常错误的。询问如何在Python中运行同样糟糕的命令不是一个好办法!我真诚地感谢你的时间和回答。