【问题标题】:Bad output format in .txt file.txt 文件中的错误输出格式
【发布时间】:2015-03-01 14:17:01
【问题描述】:

我正在尝试打印到 lexic.txt,如下所示:

Palabra Tag Apariciones
mentales Adj 21
Joaquín_Sánchez_Garrido NP 1
tardíamente Adv 2
repito  V 1
filipinos   Adj 8

但我得到的输出如下:

Palabra Tag Apariciones
mentales Adj 
21
Joaquín_Sánchez_Garrido NP 
1
tardíamente Adv 
2
repito  V 
1
filipinos   Adj 
8

这里是 Python 代码:

file=open('corpus.txt','r')
data=file.readlines()
file.close()

diccionario = {}

for linea in data:
    linea.decode('latin_1').encode('UTF-8') # para los acentos
    palabra_tag = linea.split('\n')
    cadena = str(palabra_tag[0])
    if(diccionario.has_key(cadena)):
        aux = diccionario.get(cadena)
        aux += 1
        diccionario.update({cadena:aux})
    else:
        diccionario.update({cadena:1})

outfile = open('lexic.txt', 'w')
outfile.write('Palabra\tTag\tApariciones\n')

for key, value in diccionario.iteritems() :
    s = str(value)
    outfile.write(key +" "+s+'\n')
outfile.close()

示例输入文件:

Al  Prep
menos   Adv
cinco   Det
reclusos    Adj
murieron    V
en  Prep
las Det
últimas Adj
24  Num
horas   NC
en  Prep
las Det
cárceles    NC
de  Prep
Valencia    NP
y   Conj
Barcelona   NP
en  Prep
incidentes  NC
en  Prep
los Det
que Pron
su  Det

基本上corpus.txt是一个word+tag的训练集,所以程序读取所有的输入文件,写出一个带有word+tag和文件出现次数的输出文件。

有人可以帮我得到想要的结果吗?我是 Python 的新手...

提前致谢

【问题讨论】:

  • 为什么要标记机器学习?
  • @tourniquet_grab 现在可以了吗?
  • 也许outfile.write(key + '\n' + s + '\n') ?
  • @HerrActress 不,'\n' 是换行,我要相反,保持键和值在同一行
  • @gerard 啊抱歉,我以为你想要的正好相反

标签: python format


【解决方案1】:

代码似乎对我来说可以正常工作;但是可以简化为

# Python 3
from collections import Counter

with open("corpus.txt", encoding="latin_1") as inf:
    wordcount = Counter(line.rstrip() for line in inf)

with open("lexic.txt", "w", encoding="utf-8") as outf:
    outf.write('Palabra\tTag\tApariciones\n')
    for word,count in wordcount.items():
        outf.write("{}\t{}\n".format(word, count))

# Python 2
from collections import Counter

with open("corpus.txt") as inf:
    wordcount = Counter(line.decode("latin_1").rstrip() for line in inf)

with open("lexic.txt", "w") as outf:
    outf.write('Palabra\tTag\tApariciones\n'.encode("utf-8"))
    for word,count in wordcount.iteritems():
        outf.write("{}\t{}\n".format(word, count).encode("utf-8"))

【讨论】:

  • 在终端中我得到:TypeError: 'encoding' is an invalid keyword argument for this function (line 3)
  • 我的错;我只在 Python 3.4 中测试过。
  • 感谢您的时间和帮助,现在我收到以下错误:Traceback (most recent call last): File "P4.py", line 9, in <module> outf.write("{}\t{}\n".format(word, count).encode("utf-8")) UnicodeEncodeError: 'ascii' codec can't encode character u'\xf3' in position 3: ordinal not in range(128)
【解决方案2】:

使用 format() 构造输出字符串时,您需要将其设为 UTF-8 字符串以保存单词中的特殊字符。错误消息中提到的“ascii”编码的应用表明了这一点。 使用这个:

for word,count in wordcount.iteritems(): outf.write(u"{}\t{}\n".format(word, count).encode("utf-8"))

编辑: 抱歉,这应该是在 Hugh 提供的近乎完美的解决方案之后出现的。我只是在回应 Gerard 遇到的错误。 Hugh 没有遇到这个问题,因为他运行的是 python 3.x,默认情况下将字符串处理为 unicode。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多