我有一个非常基本的问题。我有名为 like 的文件Dipole_E0=1.2625E-01.dat
,我想提取该1.2625E-01
部分,最后按升序对它们进行排序。如何才能做到这一点 ?我首先尝试使用 .split() 拆分文件名,但这不是我所期望的。谢谢你的帮助。
最好的
罗兰
最好的方法是使用正则表达式。从文件名中获取值:
m = re.search(filename, '^Dipole_E0=(.*)/s?')
val = m.group(0)
遍历所有 dilenames 并将所有值附加到数组。在那之后,就是这样。
您想研究正则表达式。在 python 中,它们位于 re 模块中。根据确切的格式,例如:
import re
ematch = re.compile("=([0-9]*\.[0-9]*[eE][+-][0-9]+)")
val = ematch.search(filename).group(0)
可以使用列表上的 .sort() 方法或内置的 sorted(list) 对列表进行排序,它会为您提供一个新列表。
您可以使用 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 是该字符串右侧的字符串(此处:您的浮点数)。然后将其转换为浮点数并附加到值列表中。
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]