簡體   English   中英

根據雙重條件對txt中的行進行排序

[英]Sort lines in txt based on double condition

我有一個大的 txt 文件,其結構如下:

  • title_topic --> ~1900 個不同的值
  • title_foreach_post --> 可以與 title_topic 或 [] 相同
  • post_number --> 從 null 開始,一直到 n

我想知道是否有一種方法可以a)重新組合和排序具有相同 title_topic 的所有行,然后b)根據邏輯數字順序(1、2..9、10、11、12 等)對它們進行排序。

謝謝大家。

txt文件示例:

{"title_topic": "Résoudre un problème avec Go voyage", "title_foreach_post": ["\nRe: Résoudre un problème avec Go voyage"], "post_number"

{"title_topic": "Résoudre un problème avec Go voyage", "title_foreach_post": ["\nRe: Résoudre un problème avec Go voyage"], "post_number":1_number

{"title_topic": "Résoudre un problème avec Go voyage", "title_foreach_post": ["\nRe: Résoudre un problème avec Go 航程"}, "post_number":"10_航次"},

{"title_topic": "Loueur Goldcar ne rembourse pas une réservation annulée", "title_foreach_post": ["\nRe: Loueur Goldcar ne rembourse pas une réservation annulée"], "post_number": "null"}

{"title_topic": "Loueur Goldcar ne rembourse pas une réservation annulée", "title_foreach_post": ["\nRe: Loueur Goldcar ne rembourse pas une réservation annulée"], "post_number": "1."}

{"title_topic": "Loueur Goldcar ne rembourse pas une réservation annulée", "title_foreach_post": ["\nRe: Loueur Goldcar ne rembourse pas une réservation annulée"], "post_number": "12."}

{"title_topic": "Résoudre un problème avec Go voyage", "title_foreach_post": ["\nRe: Résoudre un problème avec Go 航程"}, "post_number."

{"title_topic": "Résoudre un problème avec Go voyage", "title_foreach_post": ["\nRe: Résoudre un problème avec Go 航程"}, "post_number": "12_

Output 示例:

輸出示例

正如您在下面的代碼中看到的,我使用sorted()內置 function 按兩個字段(e['title_topic'], e['post_number'])對條目列表進行排序。

例如,我正在使用io.StringIO()從文本字符串讀取輸入文件到 model 文件輸入,在現實生活中您將使用常規文件讀取。

在線嘗試!

import io, json

text = r"""
{"title_topic": "Résoudre un problème avec Go voyage", "title_foreach_post": ["\nRe: Résoudre un problème avec Go voyage "], "post_number": "null"}
{"title_topic": "Résoudre un problème avec Go voyage", "title_foreach_post": ["\nRe: Résoudre un problème avec Go voyage "], "post_number": "1."}
{"title_topic": "Résoudre un problème avec Go voyage", "title_foreach_post": ["\nRe: Résoudre un problème avec Go voyage "], "post_number": "10."}
{"title_topic": "Loueur Goldcar ne rembourse pas une réservation annulée", "title_foreach_post": ["\nRe: Loueur Goldcar ne rembourse pas une réservation annulée "], "post_number": "null"}
{"title_topic": "Loueur Goldcar ne rembourse pas une réservation annulée", "title_foreach_post": ["\nRe: Loueur Goldcar ne rembourse pas une réservation annulée "], "post_number": "1."}
{"title_topic": "Loueur Goldcar ne rembourse pas une réservation annulée", "title_foreach_post": ["\nRe: Loueur Goldcar ne rembourse pas une réservation annulée "], "post_number": "12."}
{"title_topic": "Résoudre un problème avec Go voyage", "title_foreach_post": ["\nRe: Résoudre un problème avec Go voyage "], "post_number": "11."}
{"title_topic": "Résoudre un problème avec Go voyage", "title_foreach_post": ["\nRe: Résoudre un problème avec Go voyage "], "post_number": "12."}
"""

data = [json.loads(line) for line in io.StringIO(text) if line.strip()]
data = sorted(data, key = lambda e: (e['title_topic'],
    int(float(e['post_number'])) if e['post_number'] != 'null' else 0))
print(data)

Output:

[
    {
        "title_topic": "Loueur Goldcar ne rembourse pas une réservation annulée",
        "title_foreach_post": [
            "\nRe: Loueur Goldcar ne rembourse pas une réservation annulée "
        ],
        "post_number": "null"
    },
    {
        "title_topic": "Loueur Goldcar ne rembourse pas une réservation annulée",
        "title_foreach_post": [
            "\nRe: Loueur Goldcar ne rembourse pas une réservation annulée "
        ],
        "post_number": "1."
    },
    {
        "title_topic": "Loueur Goldcar ne rembourse pas une réservation annulée",
        "title_foreach_post": [
            "\nRe: Loueur Goldcar ne rembourse pas une réservation annulée "
        ],
        "post_number": "12."
    },
    {
        "title_topic": "Résoudre un problème avec Go voyage",
        "title_foreach_post": [
            "\nRe: Résoudre un problème avec Go voyage "
        ],
        "post_number": "null"
    },
    {
        "title_topic": "Résoudre un problème avec Go voyage",
        "title_foreach_post": [
            "\nRe: Résoudre un problème avec Go voyage "
        ],
        "post_number": "1."
    },
    {
        "title_topic": "Résoudre un problème avec Go voyage",
        "title_foreach_post": [
            "\nRe: Résoudre un problème avec Go voyage "
        ],
        "post_number": "10."
    },
    {
        "title_topic": "Résoudre un problème avec Go voyage",
        "title_foreach_post": [
            "\nRe: Résoudre un problème avec Go voyage "
        ],
        "post_number": "11."
    },
    {
        "title_topic": "Résoudre un problème avec Go voyage",
        "title_foreach_post": [
            "\nRe: Résoudre un problème avec Go voyage "
        ],
        "post_number": "12."
    }
]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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