yusuf yusuf - 3 months ago 10
Python Question

python - adding quotes for an each word and symbol on a text file

I want to put quotation marks between each words and symbols on a text file.

For instance;


Türkiye ya da resmî adıyla Türkiye Cumhuriyeti, topraklarının büyük
bölümü Anadolu'ya, küçük bir bölümü ise Balkanlar'ın uzantısı olan
Trakya'ya yayılmış bir ülke.


becomes ->


"Türkiye" "ya" "da" "resmî" "adıyla" "Türkiye" "Cumhuriyeti" ","
"topraklarının" "büyük" "bölümü" "Anadolu'ya" "," "küçük" "bir"
"bölümü" "ise" "Balkanlar'ın" "uzantısı" "olan" "Trakya'ya" "yayılmış"
"bir" "ülke" "."


For this reason, I have written such a code:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import re, codecs, io

with io.open ("turkish.txt", "r", encoding="utf-8") as myfile:
text=myfile.read()

replacer = re.compile("([\w'-]+|[.,!?;()%])", re.UNICODE)

output_text = replacer.sub(r'"\1"', text).replace('""','" "')

text_file = open("Output.txt", "w")
text_file.write(output_text.encode('utf8'))
text_file.close()


On the example above, the replacement is fine.

But for such an example,


Geçmişi MÖ 10.000 tarihine kadar uzanan Göbekli Tepe, ülke toprakları
üzerindeki bilinen en eski dini yapının bulunduğu yerdir.


the replacement occurs as following;


"Geçmişi" "MÖ" "10" "." "000" "tarihine" "kadar" "uzanan" "Göbekli"
"Tepe" "," "ülke" "toprakları" "üzerindeki" "bilinen" "en" "eski"
"dini" "yapının" "bulunduğu" "yerdir" "."


As you see,
10.000
is a number, and I don't want to seperate such numbers with quotation marks.

I want that to be seperated like
"10.000"
.

How should I modify my regex or code to achieve that?

Thanks,

Answer

Adding [\d\.]+| to the beginning of the regex pattern matches the "10.000" as intended.

replacer = re.compile(r"([\d\.]+|[\w'-]+|[.,!?;()%])", re.UNICODE)