如何在 Python 的文本文件中用土耳其语字符替换 Unicode 字符
How can I replace Unicode characters with Turkish characters in a text file with Python
我在 Twitter 上工作。我使用 Stream API 从 Twitter 获取数据,应用程序的结果是 JSON 文件。我在文本文件中写入了推文数据,现在我看到的是 Unicode 字符而不是土耳其语字符。我不想在 Notepad++ 中手动执行 find/replace。是否有任何自动选项可以通过打开 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()
这两个都不行。
我怎样才能让它发挥作用?
JSON 允许 "escaped" 和 "unescaped" 字符。 TwitterAPIreturns之所以只转义字符,是因为它可以使用ASCII编码,增加了互操作性。对于土耳其语字符,您需要另一种编码。使用 open
函数打开文件会打开一个假定您当前的语言环境编码的文件,这可能是您的编辑器所期望的。如果您希望输出文件具有例如ISO-8859-9
编码,您可以将 encoding='ISO-8859-9
' 作为附加参数传递给 open
函数。
您可以使用 json.load
函数读取包含 JSON 对象的文件。此 returns 一个 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))
你可以使用这个方法:
# For Turkish Character
translationTable = str.maketrans("ğĞıİöÖüÜşŞçÇ", "gGiIoOuUsScC")
yourText = "Pijamalı Hasta Yağız Şoföre Çabucak Güvendi"
yourText = yourText.translate(translationTable)
print(yourText)
我在 Twitter 上工作。我使用 Stream API 从 Twitter 获取数据,应用程序的结果是 JSON 文件。我在文本文件中写入了推文数据,现在我看到的是 Unicode 字符而不是土耳其语字符。我不想在 Notepad++ 中手动执行 find/replace。是否有任何自动选项可以通过打开 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()
这两个都不行。 我怎样才能让它发挥作用?
JSON 允许 "escaped" 和 "unescaped" 字符。 TwitterAPIreturns之所以只转义字符,是因为它可以使用ASCII编码,增加了互操作性。对于土耳其语字符,您需要另一种编码。使用 open
函数打开文件会打开一个假定您当前的语言环境编码的文件,这可能是您的编辑器所期望的。如果您希望输出文件具有例如ISO-8859-9
编码,您可以将 encoding='ISO-8859-9
' 作为附加参数传递给 open
函数。
您可以使用 json.load
函数读取包含 JSON 对象的文件。此 returns 一个 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))
你可以使用这个方法:
# For Turkish Character
translationTable = str.maketrans("ğĞıİöÖüÜşŞçÇ", "gGiIoOuUsScC")
yourText = "Pijamalı Hasta Yağız Şoföre Çabucak Güvendi"
yourText = yourText.translate(translationTable)
print(yourText)