#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
Примечание: использование этого способа будет фильтровать все неанглийское, это не относится к тайскому языку. Не уверен, что это проблема для вас.