如何为包含小数和科学计数法的字符串制作list.sort()键?

0 python sorting list

我需要获取时间戳记文件夹中的文件路径(以秒为单位)。文件夹名称示例0.0009899654284611.00189731936e-05 而且我也需要写出时间。

我尝试了一些变体,key=list.sort(key='')获得从坏到坏的不同结果。我缺乏对潜在问题的list.sort()理解:“理解”我的字符串是数字,但不理解x.xxe-xx也是数字格式。

我必须获取路径文件并将时间写为csv

#### import the simple module from the paraview
from paraview.simple import *
import os
import csv
import re

param='mitteQuer0'

fieldOne= 'U_zCut.vtk'
fieldTwo= 'p_rgh_zCut.vtk'
fieldThree= 'alpha.water_zCut.vtk'

fieldOneVTKs= []
fieldTwoVTKs=[]
fieldThreeVTKs=[]
time=[]
steps=[]
timeNsteps=[]

#Get path of the script
dir_path = os.path.dirname(os.path.realpath(__file__))
#Make folder path
path = dir_path + '/postProcessing/'+param

for path, dirs, files in os.walk(path, topdown=False):
    dirs.sort()
    for name in dirs:
        fieldOneVTKs.append(os.path.join(path, name+'/'+fieldOne))
        fieldTwoVTKs.append(os.path.join(path, name+'/'+fieldTwo))
        fieldThreeVTKs.append(os.path.join(path, name+'/'+fieldThree))

with open('time.csv', 'w') as csvfile:
    csvfile.write('Zeit,')
    csvfile.write('\n')
    for item in dirs:
        csvfile.write(item +',')
        csvfile.write('\n')
Run Code Online (Sandbox Code Playgroud)

之后需要大量工作代码才能使用带paraview的路径。

我使用os.walklist.sort(),但是排序无法按我需要的方式工作。仅查看文件夹名称会得到什么:

0.000970221197898
0.000980099262637
0.000989965428461
1.00189731936e-05
2.00244250065e-05
3.00104958923e-05
Run Code Online (Sandbox Code Playgroud)

我需要的:

1.00189731936e-05
2.00244250065e-05
3.00104958923e-05
0.000970221197898
0.000980099262637
0.000989965428461
Run Code Online (Sandbox Code Playgroud)

Sun*_*tha 5

float将字符串的值用作键进行排序,方法是替换dirs.sort()dirs.sort(key=float)

例如

>>> lst = ['0.000970221197898', '0.000980099262637', '0.000989965428461', '1.00189731936e-05', '2.00244250065e-05', '3.00104958923e-05']
>>> lst.sort(key=float)
>>> 
>>> pprint (lst)
['1.00189731936e-05',
 '2.00244250065e-05',
 '3.00104958923e-05',
 '0.000970221197898',
 '0.000980099262637',
 '0.000989965428461']
Run Code Online (Sandbox Code Playgroud)