.txt文件中的输出格式错误

时间:2015-03-01 14:17:02

标签: python format

我试图打印到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 +标签的训练集,因此程序读取所有输入文件,并在文件中写入带有+标签和出现次数的输出文件。

有人可以帮助我获得理想的结果吗?我是Python的新手......

提前致谢

2 个答案:

答案 0 :(得分:0)

代码似乎适合我;但它可以简化为

# 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"))

答案 1 :(得分:0)

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

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

编辑: 对不起,这应该是在Hugh几乎完美的解决方案之后出现的。我只是回应杰拉德得到的错误。 Hugh没有遇到这个问题,因为他正在运行python 3.x,它默认将字符串作为unicode处理。