切分语料脚本报错:too many values to unpack (expected2)

 

这是因为.split('\t')分割的列表中元素多于2个。

如果你 只需要前2个元素,可以这样:

s="1\t2\t3\t4"

a , b , *li = s.split('\t')

print(a)

print(b)

print(li) #多于的元素会放到li中


 

可能数据中有多个 '\t' ,split 出来的结果就不止两个

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

最后有异常提示了,数据太多了吧?试试用小量数据测试一下代码

这因为你文件内容中有的行中没有'\t',.split('\t')分割的列表中只有一个元素。 

一个元素没法赋值给 tgt_line , src_line 两个变量。 

 

你要读取的文件内容是什么样子的, 发上来看看,现在是你读取的文件内容有问题

 

 

你用这个试试。如果文件内容不对会提示出来,

如果中文是乱码,把 encoding='utf-8' 改成 encoding='gbk' 试试

 

import sys
def cut2(fpath, new_data_dir, nsrc='zh', ntgt='en'):
    fp = open(fpath, 'r', encoding='utf-8')
    src_fp = open(new_data_dir+'raw.'+nsrc, 'w', encoding='utf-8')
    tgt_fp = open(new_data_dir+'raw.'+ntgt, 'w', encoding='utf-8')
    for line in fp.readlines():
        li = line.replace('\n', '').split('\t')
        if len(li)!=2:
            print("出错的行:",line)
            continue
        tgt_line = li[0]
        src_line = li[1]
        src_fp.write(src_line + '\n')
        tgt_fp.write(tgt_line + '\n')
    src_fp.close()
    tgt_fp.close()

 

line.replace('\n', ' ').split('\t')

不能赋值给两个变量那,只能赋值给一个,返回的是一个列表

不是科班学生,就想知道这个脚本要怎么修改才能在ubuntu上跑起来...若能解决必有重谢!