文件写入时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()
新手表示很纠结,跪求各位大神指导{:10_250:} 错误提示给的很清楚了,需要传入的是str类型,而不是list
你需要将boy,girl这两个list转换为str才行
转换方法:
boy = ','.join(map(str, boy)) BngThea 发表于 2019-3-14 08:53
错误提示给的很清楚了,需要传入的是str类型,而不是list
你需要将boy,girl这两个list转换为str才行
的确 但是我用的是writelines方法 传list类型没错啊 而且我没用write方法 难受 Britain_Style 发表于 2019-3-14 08:58
的确 但是我用的是writelines方法 传list类型没错啊 而且我没用write方法 难受
为何我用writelines就没有报这个错?
你的错误提示显示你用的是write BngThea 发表于 2019-3-14 09:02
为何我用writelines就没有报这个错?
你的错误提示显示你用的是write
我也很是奇怪。。我贴了代码 一个write方法都没有啊 楼主你好,我今天也碰上同样的问题,已经解决了,不知道你最终解决没有,还是在这里答上,希望能帮助以后有需要的朋友。
首先“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]