根据双重条件对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)[= 的所有行42=] 然后根据逻辑数字顺序(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": "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."}
输出示例:
正如您在下面的代码中看到的,我使用 sorted() 内置函数按两个字段 (e['title_topic'], e['post_number'])
.
对条目列表进行排序
举个例子,我正在使用 io.StringIO()
从文本字符串中读取输入文件来模拟文件输入,在现实生活中,您将使用常规文件读取。
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)
输出:
[
{
"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."
}
]
我有一个很大的 txt 文件,其结构如下:
- title_topic --> ~1900 个不同的值
- title_foreach_post --> 可以与 title_topic 或 [] 相同
- post_number --> 从 null 开始,一直到 n
我想知道是否有办法 a) 重新组合和排序具有相同 title_topic 和 b)[= 的所有行42=] 然后根据逻辑数字顺序(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": "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."}
输出示例:
正如您在下面的代码中看到的,我使用 sorted() 内置函数按两个字段 (e['title_topic'], e['post_number'])
.
举个例子,我正在使用 io.StringIO()
从文本字符串中读取输入文件来模拟文件输入,在现实生活中,您将使用常规文件读取。
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)
输出:
[
{
"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."
}
]