如何使用 Python 将文本文件中的 Unicode 字符替换为土耳其语字符

问题描述 投票:0回答:3

我在推特上工作。我使用 Stream API 从 Twitter 获取数据,应用程序的结果是 JSON 文件。我在文本文件中写入了推文数据,现在我看到的是 Unicode 字符而不是土耳其语字符。我不想在 Notepad++ 中手动查找/替换。是否有任何自动选项可以通过打开 txt 文件、读取文件中的所有数据并通过 Python 将 Unicode 字符更改为土耳其字符来替换字符?

这是我要替换的 Unicode 字符和土耳其字符。

  • ğ - \u011f
  • Ğ - \u011e
  • ı - \u0131
  • İ - \u0130
  • ö - \u00f6
  • Ö - \u00d6
  • ü - \u00fc
  • Ü - \u00dc
  • ş - \u015f
  • Ş - \u015e
  • ç - \u00e7
  • Ç - \u00c7

我尝试了两种不同的类型

#!/usr/bin/env python

# -*- coding: utf-8 -*- 

import re

dosya = open('veri.txt', 'r')

for line in dosya:
    match = re.search(line, "\u011f")
    if (match):
        replace("\u011f", "ğ")

dosya.close()

和:

#!/usr/bin/env python

# -*- coding: utf-8 -*- 

f1 = open('veri.txt', 'r')
f2 = open('veri2.txt', 'w')

for line in f1:
    f2.write=(line.replace('\u011f', 'ğ')) 
    f2.write=(line.replace('\u011e', 'Ğ'))
    f2.write=(line.replace('\u0131', 'ı'))
    f2.write=(line.replace('\u0130', 'İ'))
    f2.write=(line.replace('\u00f6', 'ö'))
    f2.write=(line.replace('\u00d6', 'Ö'))
    f2.write=(line.replace('\u00fc', 'ü'))
    f2.write=(line.replace('\u00dc', 'Ü'))
    f2.write=(line.replace('\u015f', 'ş'))
    f2.write=(line.replace('\u015e', 'Ş'))
    f2.write=(line.replace('\u00e7', 'ç'))
    f2.write=(line.replace('\u00c7', 'Ç'))

f1.close()
f2.close()

这两个都不起作用。 我怎样才能让它发挥作用?

python unicode replace character turkish
3个回答
5
投票

JSON 允许“转义”和“未转义”字符。 Twitter API 只返回转义字符的原因是它可以使用 ASCII 编码,这增加了互操作性。对于土耳其语字符,您需要另一种编码。使用

open
函数打开一个文件会假设您当前的语言环境编码,这可能是您的编辑器所期望的。如果您希望输出文件具有例如
ISO-8859-9
编码,您可以将
encoding='ISO-8859-9
' 作为附加参数传递给
open
函数。

您可以使用

json.load
函数读取包含 JSON 对象的文件。这将返回一个 Python 对象,其中包含已解码的转义字符。使用
json.dump
再次写入并传递
ensure_ascii=False
作为参数将对象写回文件,而不将土耳其字符编码为转义序列。一个例子:

import json
inp = open('input.txt', 'r')
out = open('output.txt', 'w')
in_as_obj = json.load(inp)
json.dump(in_as_obj, out, ensure_ascii=False)

你的文件并不是真正的 JSON 文件,而是一个包含多个 JSON 对象的文件。如果每个 JSON 对象都在自己的行上,您可以尝试以下操作:

import json
inp = open('input.txt', 'r')
out = open('output.txt', 'w')
for line in inp:
    if not line.strip():
        out.write(line)
        continue
    in_as_obj = json.loads(line)
    json.dump(in_as_obj, out, ensure_ascii=False)
    out.write('\n')

但在您的情况下,最好首先将未转义的 JSON 写入文件。尝试用(未经测试)替换您的

on_data
方法:

def on_data(self, raw_data):
    data = json.loads(raw_data)
    print(json.dumps(data, ensure_ascii=False))

5
投票

你可以使用这个方法:

# For Turkish Character
translationTable = str.maketrans("ğĞıİöÖüÜşŞçÇ", "gGiIoOuUsScC")

yourText = "Pijamalı Hasta Yağız Şoföre Çabucak Güvendi"
yourText = yourText.translate(translationTable)

print(yourText)

0
投票

zip() 函数就足够了。它接受可迭代对象并将它们聚合在一个元组中。并返回它。

cumle = "Pijamalı Hasta Yağız Şoföre Çabucak Güvendi"

tr_array = list("ğĞıİöÖüÜşŞçÇ")
en_array = list("gGiIoOuUsScC")

for turkce, ingilizce in zip(tr_array, en_array):
    cumle = cumle.replace(turkce, ingilizce)
print(cumle)
© www.soinside.com 2019 - 2024. All rights reserved.