La série python2.x prête à confusion car l'objet str et l'objet unicode sont séparés. Après avoir recherché diverses choses, c'est devenu comme ça. Dans la série python3.x, le texte est traité en Unicode, donc cela semble plus facile.
MacOS X 10.6.8 Python 2.6.1
python
# coding: UTF-8
import codecs
import string
import re
f_in = codecs.open('test.txt', 'r', 'utf-8')
f_out = codecs.open('test_out.txt', 'w', 'utf-8')
lines = f_in.readlines() #Lis
lines2 = []
for line in lines:
line = string.replace(line,u'texte',u'text') #texte置換
line = re.sub(r'(\d)(?=(\d{3})+(?!\d))', r'\1', line) #Remplacement d'expression régulière
lines2.append(line) #Faites une liste séparée
else:
f_out.write(string.join(lines2,'')) #l'écriture
f_in.close()
f_out.close()
test.txt
Ceci est un exemple de texte.
Insérez une virgule tous les 3 chiffres.
iPad mini 36800 yens
test_out.txt
Ceci est un exemple de texte.
Insérez une virgule tous les 3 chiffres.
iPad mini 36,800 yens
Post-scriptum: J'ai écrit du code qui fonctionne avec python3.3. Après tout, python3 utilise également le module codecs, Le remplacement est-il effectué par une fonction de l'objet str et simplement pas en utilisant u '' littéral?
python
from __future__ import unicode_literals
Si vous ajoutez, toutes les chaînes seront traitées comme unicode même s'il n'y a pas de littéral u ''. Cela fonctionne normalement avec python2.6. C'est peut-être le meilleur pour le moment.
python
# coding: UTF-8
from __future__ import unicode_literals # <-Traitez toutes les chaînes de caractères comme unicode. Non requis pour la série 3
import codecs
import re
f_in = codecs.open('test.txt', 'r', 'utf-8')
f_out = codecs.open('test_out.txt', 'w', 'utf-8')
lines = f_in.readlines() #Lis
lines2 = []
for line in lines:
line = line.replace('texte','text') #texte置換
line = re.sub(r'(\d)(?=(\d{3})+(?!\d))', r'\1,', line) #Remplacement d'expression régulière
lines2.append(line) #Faites une liste séparée
else:
f_out.write(''.join(lines2)) #l'écriture
f_in.close()
Recommended Posts