簡體   English   中英

使用 python 根據某些字符對文本文件中的行進行排序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM