0

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

最好的

罗兰

4

4 回答 4

1

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

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

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

于 2012-05-22T09:11:07.590 回答
1

您想研究正则表达式。在 python 中,它们位于 re 模块中。根据确切的格式,例如:

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

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

于 2012-05-22T09:12:49.243 回答
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 是该字符串右侧的字符串(此处:您的浮点数)。然后将其转换为浮点数并附加到值列表中。

于 2012-05-22T09:08:43.550 回答
0

这是使用生成器表达式内置函数sorted好情况:

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]
于 2012-05-22T09:13:59.653 回答