[英]sort lines in text file based on certain characters with python
我需要先按行的 W0** 部分對文本文件中的行進行排序,然后再按行的 N** 部分對行進行排序(請參閱我的文本文件示例)
**What I have**
oDS_SPOT6_202206261442155_FR1_FR1_SV1_SV1_W065N46_03820_PS8.pix
oDS_SPOT6_202207081449521_FR1_FR1_SV1_SV1_W062N46_03251_PS8.pix
oDS_SPOT6_202207081450141_FR1_FR1_SV1_SV1_W062N45_01790_PS8.pix
oDS_SPOT6_202207081450305_FR1_FR1_SV1_SV1_W063N45_01871_PS8.pix
oDS_SPOT6_202207201458204_FR1_FR1_SV1_SV1_W065N44_04307_PS8.pix
oDS_SPOT6_202207241426291_LM1_LM1_FR1_FR1_W060N47_03170_PS8.pix
**What I want**
oDS_SPOT6_202207241426291_LM1_LM1_FR1_FR1_W060N47_03170_PS8.pix
oDS_SPOT6_202207081450141_FR1_FR1_SV1_SV1_W062N45_01790_PS8.pix
oDS_SPOT6_202207081449521_FR1_FR1_SV1_SV1_W062N46_03251_PS8.pix
oDS_SPOT6_202207081450305_FR1_FR1_SV1_SV1_W063N45_01871_PS8.pix
oDS_SPOT6_202207201458204_FR1_FR1_SV1_SV1_W065N44_04307_PS8.pix
oDS_SPOT6_202206261442155_FR1_FR1_SV1_SV1_W065N46_03820_PS8.pix
到目前為止,我擁有的代碼能夠解析文件夾並將文件名放在文本文件中。 我只是不確定如何對它創建的文本文件中的文件進行排序。
import os
ifolder = raw_input('Path to the folder: ').strip('"')
otext = raw_input('Path to the folder for output text file: ')
file = open(os.path.join(otext, 'listdir.txt'), 'w')
for myfile in os.listdir(ifolder):
print myfile
file.write(myfile + '\n')
file.close()
您可以使用正則表達式來查找要用於排序的部分。 此外,基於整個部分的排序(W0*N*)
應該與基於 2 個部分W*
和N*
的部分排序相同。
import re
def sort_(x):
# helper function to sort.
# returns the part to use for sorting.
index = re.search("W\d+N\d+", x).span()
section = x[index[0]: index[1]]
return section
if __name__ == "__main__":
lst = """oDS_SPOT6_202206261442155_FR1_FR1_SV1_SV1_W065N46_03820_PS8.pix
oDS_SPOT6_202207081449521_FR1_FR1_SV1_SV1_W062N46_03251_PS8.pix
oDS_SPOT6_202207081450141_FR1_FR1_SV1_SV1_W062N45_01790_PS8.pix
oDS_SPOT6_202207081450305_FR1_FR1_SV1_SV1_W063N45_01871_PS8.pix
oDS_SPOT6_202207201458204_FR1_FR1_SV1_SV1_W065N44_04307_PS8.pix
oDS_SPOT6_202207201458204_FR1_FR1_SV1_SV1_W065N43_04307_PS8.pix
oDS_SPOT6_202207241426291_LM1_LM1_FR1_FR1_W060N47_03170_PS8.pix""".split()
# pass reference to function to sorting algorithm
print("\n".join(sorted(lst, key=sort_)), "\n\n")
如果您不想使用正則表達式並且保證文件名格式相同,則可以使用以下內容:
print("\n".join(sorted(lst, key=lambda x: x.split("_")[-3])), "\n\n")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.