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

时间:2016-05-29 13:46:22

标签: python unicode replace character turkish

我在Twitter上工作。我使用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()

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

2 个答案:

答案 0 :(得分:2)

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写入文件可能更好。尝试将({1}}方法替换为(未经测试):

on_data

答案 1 :(得分:0)

您可以使用此方法:

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

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

print(yourText)