我有一个文本文件,其中包含以下内容:
IMAGE_[A0]_00001.jpg
IMAGE_[A0]_00002.jpg
IMAGE_[A1]_00001.jpg
IMAGE_[A1]_00002.jpg
IMAGE_[B0]_00001.jpg
IMAGE_[B0]_00002.jpg
IMAGE_[B1]_00001.jpg
IMAGE_[B1]_00002.jpg
我需要组织如下:
IMAGE_[A0]_00001.jpg
IMAGE_[A1]_00001.jpg
IMAGE_[B0]_00001.jpg
IMAGE_[B1]_00001.jpg
IMAGE_[A0]_00002.jpg
IMAGE_[A1]_00002.jpg
IMAGE_[B0]_00002.jpg
IMAGE_[B1]_00002.jpg
我如何使用python 3x做到这一点?
答案 0 :(得分:1)
您可以使用密钥排序,然后写回文件:
with open('test.txt') as f:
data = sorted(f.read().splitlines(), key=lambda x: (x[11:16], x[7:9]))
print('\n'.join(data))
输出:
IMAGE_[A0]_00001.jpg
IMAGE_[A1]_00001.jpg
IMAGE_[B0]_00001.jpg
IMAGE_[B1]_00001.jpg
IMAGE_[A0]_00002.jpg
IMAGE_[A1]_00002.jpg
IMAGE_[B0]_00002.jpg
IMAGE_[B1]_00002.jpg
答案 1 :(得分:1)
您的商品名称为set MYSQLDATAPATH="%HOMEDRIVE%\wamp\bin\mysql\mysql5.7.19\data"
or
set MYSQLDATAPATH="%HOMEDRIVE%\wamp64\bin\mysql\mysql5.7.19\data"
x IMAGE_
y _
。它们现在按(x,y)排序,需要按(y,x)排序。
这可以通过例如完成通过正则表达式:
.jpg
答案 2 :(得分:1)
您可以使用re
和sorted
:
import re
import string
def key_param(d):
a, b= re.findall('(?<=\[)\w+(?=\])|\d+(?=\.jpg)', d)
return [int(b)]+[int(i) if i.isdigit() else string.ascii_uppercase.index(i) for i in a]
file_data = [i.strip('\n') for i in open('filename.txt')]
new_data = sorted(file_data, key=key_param)
with open('filename.txt', 'w') as f:
f.write('\n'.join(new_data))
输出:
IMAGE_[A0]_00001.jpg
IMAGE_[A1]_00001.jpg
IMAGE_[B0]_00001.jpg
IMAGE_[B1]_00001.jpg
IMAGE_[A0]_00002.jpg
IMAGE_[A1]_00002.jpg
IMAGE_[B0]_00002.jpg
IMAGE_[B1]_00002.jpg