从python中的文件名中提取和排序数字

时间:2012-05-22 09:01:55

标签: python numbers extract

我有一个非常基本的问题。我有一个名为Dipole_E0=1.2625E-01.dat的文件,我想提取1.2625E-01部分,最后按升序对它们进行排序。如何才能做到这一点 ?我首先尝试使用.split()来填充文件名,但它并不是我所期望的。谢谢你的帮助。

最佳

罗兰

4 个答案:

答案 0 :(得分:1)

最好的办法是使用正则表达式。要从文件名中获取值:

m = re.search(filename, '^Dipole_E0=(.*)/s?')
val = m.group(0)

遍历所有的dilenames并将所有值附加到数组。在那之后,那就是全部。

答案 1 :(得分:1)

您想要查看正则表达式。在python中,他们住在re模块中。取决于确切的格式,例如:

import re
ematch = re.compile("=([0-9]*\.[0-9]*[eE][+-][0-9]+)")
val = ematch.search(filename).group(0)

可以使用列表上的.sort()方法或排序(列表)内置来对列表进行排序,它会为您提供新列表。

答案 2 :(得分:0)

您可以使用glob模块获取文件名。

    from glob import glob
    file_names = glob("yourpath/*.dat")

    vals = []
    for name in file_names:
         vals.append(float(name[:-4].rpartition("=")[2]))

    vals.sort()            

name [: - 4]抛弃了“.dat”。 rpartition是一个字符串方法。它返回一个元组,其中条目0是用于拆分的字符串的左侧字符串,条目1是用于拆分的字符串(此处为:“=”),条目2是该字符串右侧的字符串(此处:您的浮点数)。然后它被转换为float并附加到值列表。

答案 3 :(得分:0)

使用generator expressionthe sorted builtin

这是一个很好的情况
sorted(float(filename.split("=", 1)[1].rsplit(".", 1)[0]) for filename in filenames)

filenames是您的文件名列表。

>>> filenames = ["Dipole_E0=1.2625E-01.dat", "Dipole_E0=1.3625E-01.dat", "Dipole_E0=0.2625E-01.dat"]
>>> sorted(float(filename.split("=", 1)[1].rsplit(".", 1)[0]) for filename in filenames)
[0.02625, 0.12625, 0.13625]