удаление строк с неанглоязычным элементом в файлах json с помощью python

#python #json #dataframe

#python #json #фрейм данных

Вопрос:

У меня есть файл json (data.json), который содержит строки данных в формате json. Я хочу перебирать каждую строку и удалять строки данных, которые содержат тайский язык под частью имени, используя python. Могу ли я узнать, как это сделать? Спасибо

ввод:

 {"name":"John", "age":30, "car":audi}
{"name":"สมศักดิ์", "age":25, "car":mercedes}
{"name":"อาทิตย์", "age":49, "car":bently}
{"name":"Mark", "age":20, "car":null}
...
 

вывод:

 {"name":"John", "age":30, "car":audi}
{"name":"Mark", "age":20, "car":null}
...
 

Комментарии:

1. каков ваш код на данный момент?

Ответ №1:

Я бы использовал unicodedata встроенный модуль для этого следующим образом, допустим, у вас есть file.txt содержимое следующим образом

 {"name":"John","age":30,"car":"audi"}
{"name":"สมศักดิ์","age":25,"car":"mercedes"}
{"name":"อาทิตย์","age":49,"car":"bently"}
{"name":"Mark","age":20,"car":null}
 

затем

 import json
import unicodedata
with open("file.txt",encoding="utf-8") as f:
    for line in f:
        name = json.loads(line)["name"]
        if "THAI" not in unicodedata.name(name[0]):
            print(line, end="")
 

вывод

 {"name":"John","age":30,"car":"audi"}
{"name":"Mark","age":20,"car":null}
 

Отказ от ответственности: я предполагаю, что каждая строка является законным JSON, который содержит некоторые name . Объяснение: я перебираю строки, для строки я анализирую ее с помощью json.loads и получаю name затем, используя unicodedata , я получаю имя первого символа в Юникоде, и если THAI в его имени нет, печатаю указанную строку. Поскольку в строках уже есть свои новые строки, которые я использовал end="" (пустая строка) print .

Ответ №2:

Я сам не использовал это с тайскими строками, но вы могли бы попробовать функцию isalpha() . Это должно возвращать true, если все символы находятся в алфавите (a-z).

 if row["name"].isalpha():
    # english
else:
    # thai
 

Примечание: использование этого способа будет фильтровать все неанглийское, это не относится к тайскому языку. Не уверен, что это проблема для вас.