Britain_Style 发表于 2019-3-14 08:48:50

文件写入时writelines方法出错

自己练习小甲鱼课上的代码,给定一个聊天文件,截取不同角色的聊天内容分别存放。我在读文件的时候明明用的是writelines方法,参数也是list类型,编译总通不过,还说write方法参数应该是一个字符串。具体报错如下(没有权限发图片,暂且发文字):
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-147-7230df073f84> in <module>()
   19             with open(f_file,'w') as f, open(m_file,'w') as m:
   20               print('boy的类型是%s' % type(boy))
---> 21               f.writelines(boy)
   22               m.writelines(girl)
   23               boy.clear()

TypeError: write() argument must be str, not list

以下是代码:
boy=[]
girl=[]
i=1
count=1

with open('all.txt','r') as all :
    for line in all:
      if line != '=':
            (role, line_spoken)=line.split(':',1)
            if role == '男':
                boy.append()
                count+=1
            else:
                girl.append()
                count += 1   
      else:
            f_file='f'+str(i)+'.txt'
            m_file='m'+str(i)+'.txt'
            with open(f_file,'w') as f, open(m_file,'w') as m:
                print('boy的类型是%s' % type(boy))
                f.writelines(boy)
                m.writelines(girl)
                boy.clear()
                girl.clear()
            i+=1
            
    f_file='f'+str(i)+'.txt'
    m_file='m'+str(i)+'.txt'
    with open(f_file,'w') as f, open(m_file,'w') as m:
      f.writelines(boy)
      m.writelines(girl)
      boy.clear()
      girl.clear()

Britain_Style 发表于 2019-3-14 08:49:59

新手表示很纠结,跪求各位大神指导{:10_250:}

BngThea 发表于 2019-3-14 08:53:37

错误提示给的很清楚了,需要传入的是str类型,而不是list
你需要将boy,girl这两个list转换为str才行

转换方法:
boy = ','.join(map(str, boy))

Britain_Style 发表于 2019-3-14 08:58:31

BngThea 发表于 2019-3-14 08:53
错误提示给的很清楚了,需要传入的是str类型,而不是list
你需要将boy,girl这两个list转换为str才行



的确 但是我用的是writelines方法 传list类型没错啊 而且我没用write方法 难受

BngThea 发表于 2019-3-14 09:02:38

Britain_Style 发表于 2019-3-14 08:58
的确 但是我用的是writelines方法 传list类型没错啊 而且我没用write方法 难受

为何我用writelines就没有报这个错?
你的错误提示显示你用的是write

Britain_Style 发表于 2019-3-14 09:06:35

BngThea 发表于 2019-3-14 09:02
为何我用writelines就没有报这个错?
你的错误提示显示你用的是write

我也很是奇怪。。我贴了代码 一个write方法都没有啊

strlen 发表于 2020-5-5 08:47:47

楼主你好,我今天也碰上同样的问题,已经解决了,不知道你最终解决没有,还是在这里答上,希望能帮助以后有需要的朋友。
首先“file.writeline()”函数只接受“list of str”, 其次需要注意的是“list.append()”函数是往list最后添加新元素而不能与其它list拼接。
也就是说在楼主的代码第11和第14行:
boy.append()
girl.append()
实际上是往boy和girl两个list末尾添加了一个list作为元素,boy 和 girl最终并不是“list of str”,而是“list of list of str”。
而当楼主的代码在第21、22行:
f.writelines(boy)
m.writelines(girl)
使用writeline()函数时,参数不是list of str。至于为什么会报“write()”函数的错,我估计是因为writeline()函数里面调用了write()函数,而write()函数读取参数时发现参数是list而不是str,所以就出现了此报错。
当然,这个报错信息不够清楚。
解决方法很简单,在第11、14行,将append()函数替换为extend()函数便可以了:
boy.extend()
girl.extend()

页: [1]
查看完整版本: 文件写入时writelines方法出错