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