使用Python 3.x,我有一个字符串列表,我想对其执行自然的字母排序.
自然排序: Windows中文件的排序顺序.
例如,以下列表是自然排序的(我想要的):
['elm0', 'elm1', 'Elm2', 'elm9', 'elm10', 'Elm11', 'Elm12', 'elm13']
Run Code Online (Sandbox Code Playgroud)
这是上面列表的"排序"版本(我有):
['Elm11', 'Elm12', 'Elm2', 'elm0', 'elm1', 'elm10', 'elm13', 'elm9']
Run Code Online (Sandbox Code Playgroud)
我正在寻找一个行为与第一个类似的排序函数.
我有一个匹配浮点数的任务.我为它写了以下正则表达式:
[-+]?[0-9]*\.?[0-9]*
Run Code Online (Sandbox Code Playgroud)
但它显示错误说:
Invalid escape sequence (valid ones are \b \t \n \f \r \" \' \\ )
Run Code Online (Sandbox Code Playgroud)
但据我所知,我们还需要使用转义字符..请纠正我错在哪里.
我担心文件和目录的顺序os.walk().如果我有这些目录,1,10,11,12,2,20,21,22,3,30,31,32,什么是输出列表的顺序?
它是按数值排序的吗?
1 2 3 10 20 30 11 21 31 12 22 32
Run Code Online (Sandbox Code Playgroud)
或者按ASCII值排序,就像给出的那样ls?
1 10 11 12 2 20 21 22 3 30 31 32
Run Code Online (Sandbox Code Playgroud)
另外,我该如何获得特定的排序?
我目前试图用图像制作电影,但我找不到任何有用的东西.
到目前为止,这是我的代码:
import time
from PIL import ImageGrab
x =0
while True:
try:
x+= 1
ImageGrab().grab().save('img{}.png'.format(str(x))
except:
movie = #Idontknow
for _ in range(x):
movie.save("img{}.png".format(str(_)))
movie.save()
Run Code Online (Sandbox Code Playgroud) 我想知道Python中是否有类似PHP natsort函数的东西?
l = ['image1.jpg', 'image15.jpg', 'image12.jpg', 'image3.jpg']
l.sort()
Run Code Online (Sandbox Code Playgroud)
得到:
['image1.jpg', 'image12.jpg', 'image15.jpg', 'image3.jpg']
Run Code Online (Sandbox Code Playgroud)
但我想得到:
['image1.jpg', 'image3.jpg', 'image12.jpg', 'image15.jpg']
Run Code Online (Sandbox Code Playgroud)
UPDATE
解决方案基于此链接
def try_int(s):
"Convert to integer if possible."
try: return int(s)
except: return s
def natsort_key(s):
"Used internally to get a tuple by which s is sorted."
import re
return map(try_int, re.findall(r'(\d+|\D+)', s))
def natcmp(a, b):
"Natural string comparison, case sensitive."
return cmp(natsort_key(a), natsort_key(b))
def natcasecmp(a, b):
"Natural string comparison, ignores case."
return natcmp(a.lower(), b.lower())
l.sort(natcasecmp);
Run Code Online (Sandbox Code Playgroud) 有没有一种简单的方法来对python中的目录中的文件进行排序?我记得的文件按顺序排列
file_01_001
file_01_005
...
file_02_002
file_02_006
...
file_03_003
file_03_007
...
file_04_004
file_04_008
Run Code Online (Sandbox Code Playgroud)
我想要的是类似的东西
file_01_001
file_02_002
file_03_003
file_04_004
file_01_005
file_02_006
...
Run Code Online (Sandbox Code Playgroud)
我目前正在使用glob以下目录打开它们:
for filename in glob(path):
with open(filename,'rb') as thefile:
#Do stuff to each file
Run Code Online (Sandbox Code Playgroud)
因此,当程序执行所需的任务时,如果我一次执行多个文件,由于文件的排序,它会提供不正确的数据.有任何想法吗?
我在文件夹中有许多文件,其名称遵循约定:
0.1.txt, 0.15.txt, 0.2.txt, 0.25.txt, 0.3.txt, ...
Run Code Online (Sandbox Code Playgroud)
我需要逐个阅读它们并操纵它们内部的数据.目前我用命令打开每个文件:
import os
# This is the path where all the files are stored.
folder path = '/home/user/some_folder/'
# Open one of the files,
for data_file in os.listdir(folder_path):
...
Run Code Online (Sandbox Code Playgroud)
不幸的是,它没有按特定的顺序读取文件(不确定它是如何选择它们)而我需要从具有最小数字作为文件名的那个开始读取它们,然后是具有直接较大数字的那个,依此类推直到最后一个.
我必须对包含主机名的对象列表进行排序。
主机名采用以下格式:h1, h5, h10, h12, h12-abc, h1000, x10
如果我使用 order_by('hostname') 它将像这样排序:
h1, h10, h1000, h12, h12-abc, h5, x10
Run Code Online (Sandbox Code Playgroud)
我将如何实现这样的排序:
h1, h5, h10, h12, h12-abc, h1000, x10
Run Code Online (Sandbox Code Playgroud)
主机名始终以字符开头,然后是 1-4 位数字和部分扩展名,例如“-abc”。
我想我必须使用 Substr() 来提取数字并以某种方式对数字进行排序,“10”不会列在“5”之前。
通过搜索,我发现了一些带有 extra() 的旧示例,但 Django 文档说它将在未来被弃用,并且“使用此方法作为最后的手段” https://docs.djangoproject.com/en/2.1/ref/models /查询集/#extra
面向未来的方法是什么?
如果文本文件中的数据小于10(例如4,2,3,1),它将相应地对数据进行排序.但是,如果数据超过10(例如(3,199,4,5),它将排序为199,3,4,5而不是升序.请帮助
def readFile():
try:
fileName = open("haha.txt",'r')
data = fileName.read().split()
data.sort()
print(data)
except IOError:
print("Error: File do not exist")
return
Run Code Online (Sandbox Code Playgroud) 我似乎无法找到有关如何正确排序这样的列表的任何信息.我的列表看起来像这样
["1. Banana", "2. Pear", "11. Apple", "5. Grapes", "4. Orange"]
Run Code Online (Sandbox Code Playgroud)
使用sorted()离开我与以下
['1. Banana', '11. Apple', '2. Pear', '3. Orange', '4. Grapes']
Run Code Online (Sandbox Code Playgroud)
我希望它能像这样出来
['1. Banana', '2. Pear', '3. Orange', '4. Grapes', '11. Apple']
Run Code Online (Sandbox Code Playgroud)
list.sort(key=lambda k: k["key"])
Run Code Online (Sandbox Code Playgroud) 我有一个文件夹。在这个文件夹中的文件看起来有点像这样:
'page_121.png', 'page_122_png', 'page_123.png'... etc
当在 Python 中运行这段代码时:
sorted(os.listdir())
返回类似这样的内容:
'page_276.png', 'page_277.png', 'page_278.png', 'page_279.png', 'page_28.png', 'page_280.png', 'page_281.png', 'page_282.png'
请注意它如何按字母数字对它们进行排序,但从 279 跳到 28,这是有道理的,但不是我想要的结果。我怎样才能得到它,以便返回的数组按照数字最小到最大的顺序排列,这样就在和page_28.png之间结束了?page_27.pngpage_29.png
python ×9
sorting ×5
python-3.x ×2
django ×1
file-io ×1
image ×1
io ×1
list ×1
natsort ×1
os.walk ×1
postgresql ×1
regex ×1
screenshot ×1
video ×1