【问题标题】:Removing white spaces between unicode charcters去除 unicode 字符之间的空格
【发布时间】:2015-03-27 05:01:25
【问题描述】:

我正在尝试从我的文本文件中删除字符之间的空格并写入另一个文本文件。 这是我的代码

f = open("/home/user1/Desktop/evaluation/gold", "r")
f2 = open("gold1.txt","a")
string =f.read().split()
s=str(string)
string2 =  " ".join(s.split())

f2.write(str(string2) +"\n")
f.close()
f2.close()

这些是单词,但它没有产生结果。

matsya k kuññuṅṅaḷa ̔e 
ora kkara 
vistr̥ti yila ̔uḷḷa 
naḻ saṟi kuḷa ttila 
vaḷara ttu ṁ
kuḷa ttinu 
cuṟṟu ṁ
plāsṟṟa ̔ik  c valaya ̔iṭṭa 
nra kkēāla ̔i yu ṁ
āma yu ṁ
kayaṟi 
matsya k kuññuṅṅaḷa ̔e 
tinnunna 
sāhacarya meāḻivā kkunnu 
ta viṭa 
piṇṇākka 
kappa 
bis  c kaṟṟa 
peāṭi ccata 
ennivaya ̔eākke yāṇa 
naḻ  c sa ṟi 
kuḷa ṅṅaḷila ̔e 

预期的结果是那些没有空格的单词

matsyakkuññuṅṅaḷae 
orakkara 
vistr̥tiyila uḷḷa 
naḻsaṟikuḷattila 
vaḷarattuṁ
kuḷa ttinu 
cuṟṟu 

【问题讨论】:

  • f文件对象的意义是什么?
  • 用于读取文本文件
  • 这是 Python 3 吗?你为什么在f.read().split()产生的词的列表中使用str()
  • 是的 Python 3.2。用于将列表设为字符串
  • 期待的结果是什么?你会得到什么输出?请不要让我们猜测这里可能有什么问题。

标签: python python-3.x unicode


【解决方案1】:

如果您想删除每行的空格,请不要一口气读完整个文件。而是逐行处理文件,如果您真的想删除所有空格,请确保使用 empty 字符串来加入拆分结果:

with open("/home/user1/Desktop/evaluation/gold", "r") as inf, \
        open("gold1.txt","a") as outf:
    for line in inf:
        line = ''.join(line.split())
        outf.write(line + "\n")

你犯了几个错误:你一口气读完整个文件,然后用f.read().split()一步步拆分文件内容;这也删除了所有换行符。然后,您再次使用 str() 将该 list 转换为字符串,生成列表的 Python 表示形式,其中内容为一个字符串。然后,在将字符串写入输出文件之前,将该字符串中的所有空格替换为其他空格:

>>> sample = '''\
... matsya k kuññuṅṅaḷa ̔e 
... ora kkara
... '''
>>> sample
'matsya k kuññuṅṅaḷa ̔e \nora kkara\n'
>>> sample.split()
['matsya', 'k', 'kuññuṅṅaḷa', '̔e', 'ora', 'kkara']
>>> str(sample.split())
"['matsya', 'k', 'kuññuṅṅaḷa', '̔e', 'ora', 'kkara']"
>>> str(sample.split()).split()
["['matsya',", "'k',", "'kuññuṅṅaḷa',", "'̔e',", "'ora',", "'kkara']"]
>>> ' '.join(str(sample.split()).split())
"['matsya', 'k', 'kuññuṅṅaḷa', '̔e', 'ora', 'kkara']"

通过遍历文件对象,您将获得单独的行,从而允许您保留换行符:

>>> from io import StringIO
>>> for line in StringIO(sample):
...     line = ''.join(line.split())
...     print(line)
... 
matsyakkuññuṅṅaḷa̔e
orakkara

【讨论】:

  • 不,它不起作用。没有产生预期的输出
  • @Karun:你没有向我们展示你得到的实际结果。例如,您可能使用了错误的编解码器来打开文件。但除非您向我们展示您自己实际得到了什么,否则我无法诊断此类问题。
  • 好的,谢谢,我明白了。那么什么是样本
  • @Karun:那你得到什么输出?
  • ['keācci', 'yile', 'samara', 'tte', 'nēriṭṭa', 'pēāl', 's', 'sanvidhāna', 'ṁ', 'parājaya', ' māyir','unna','̔uvenna','ārēāpa','ṇa','ttē','̔āṭ','prati','karikka','̔u','kayā','yirunnu','addēha' , 'ṁ', '.', 'samara', 'kkār'
猜你喜欢
  • 2017-08-24
  • 2016-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多