第029讲课堂作业,分割客服问答文件
本帖最后由 jiong_jiong 于 2020-7-14 13:47 编辑课堂上,小甲鱼是将字符串分割后,写入boy和girl的两个列表中,再将列表写入文件。
我试着改成,不要列表,直接进行写入。最后并没有生成新文件。
想请教一下我代码哪里出了问题
f = open(r'C:\Users\jiong\Desktop\record.txt','r')
for each in f:
c = 1
filenameb='boy_'+str(c)+'.txt'
filenameg='girl_'+str(c)+'.txt'
if each == '======':
bfile.close() #找到分隔符后,对之前的文件进行关闭保存
gfile.close()
c = c+1
else:
(role,spoken)=each.split(':',1)
if role == '小甲鱼':
bfile = open(filenameb,'w')
bfile.write(spoken)
if role == '小客服':
gfile = open(filenameg,'w')
gfile.writelines(spoken)
f.close()
根据最佳答案改写的:
f = open(r'C:\Users\jiong\Desktop\record.txt')
c=1
##filenameb = 'boy_' + str(c) + '.txt'
##filenameg = 'girl_' + str(c) + '.txt'
##bfile = open(filenameb, 'a')
##gfile = open(filenameg, 'a')这几句放这里的话,filename不会变化,只会生成一个文件
for each in f:
filenameb = 'boy_' + str(c) + '.txt'
filenameg = 'girl_' + str(c) + '.txt'
bfile = open(filenameb, 'a')
gfile = open(filenameg, 'a')
if each != '======':
(role,spoken)=each.split(':',1)
if role == '小甲鱼':
bfile.write(spoken)
if role == '小客服':
gfile.write(spoken)
else:
bfile.close()
gfile.close()
c +=1
print('c=%d'%c)
bfile =open(filenameb,'a')
gfile =open(filenameg,'a')
bfile.close()
gfile.close()
f.close()
'w' 写入是覆盖写入,你应该改成 'a'
用 w 每次循环都会重新创建个空白文件来覆盖上次的文件内容 Twilight6 发表于 2020-7-14 11:15
'w' 写入是覆盖写入,你应该改成 'a'
用 w 每次循环都会重新创建个空白文件来覆盖上次的文件内容
已改,但是不行。
连空文件都没有。 jiong_jiong 发表于 2020-7-14 11:23
已改,但是不行。
连空文件都没有。
f = open(r'C:\Users\jiong\Desktop\record.txt')
bfile = open('boy_1.txt', 'a')
gfile = open('girl_1.txt', 'a')
for each in f:
c = 2
filenameb = 'boy_' + str(c) + '.txt'
filenameg = 'girl_' + str(c) + '.txt'
if each == '======':
bfile.close()# 找到分隔符后,对之前的文件进行关闭保存
gfile.close()
bfile = open(filenameb, 'a')
gfile = open(filenameg, 'a')
c = c + 1
else:
(role, spoken) = each.split(':', 1)
if role == '小甲鱼':
bfile.write(spoken)
if role == '小客服':
gfile.write(spoken)
bfile.close()# 找到分隔符后,对之前的文件进行关闭保存
gfile.close()
f.close()
Twilight6 发表于 2020-7-14 11:25
已测试,还是不行。没有新文件生成。 jiong_jiong 发表于 2020-7-14 11:29
已测试,还是不行。没有新文件生成。
你文件内容有问题吧,我测试有生成文件,只不过少了一个 Twilight6 发表于 2020-7-14 11:33
你文件内容有问题吧,我测试有生成文件,只不过少了一个
应该不会哦,我课前有写一个很笨的程序,是可以生成的。我又去检查一下了原文件,是OK的。
以下是笨程序
f = open(r'C:\Users\jiong\Desktop\record.txt','r')
b1 = open(r'C:\Users\jiong\Desktop\boy_1.txt','w')
g1 = open(r'C:\Users\jiong\Desktop\girl_1.txt','w')
for each in f:
if each == '小甲鱼':
b1.write(each)
elif each == '小客服':
g1.write(each)
elif each == '===':
f.readline()
break
b1.close()
g1.close()
b2 = open(r'C:\Users\jiong\Desktop\boy_2.txt','w')
g2 = open(r'C:\Users\jiong\Desktop\girl_2.txt','w')
for each in f:
if each == '小甲鱼':
b2.write(each)
elif each == '小客服':
g2.write(each)
elif each == '===':
f.readline()
break
b2.close()
g2.close()
b3 = open(r'C:\Users\jiong\Desktop\boy_3.txt','w')
g3 = open(r'C:\Users\jiong\Desktop\girl_3.txt','w')
for each in f:
if each == '小甲鱼':
b3.write(each)
elif each == '小客服':
g3.write(each)
elif each == '===':
f.readline()
break
b3.close()
g3.close()
f.close()
jiong_jiong 发表于 2020-7-14 11:34
应该不会哦,我课前有写一个很笨的程序,是可以生成的。我又去检查一下了原文件,是OK的。
以下是笨程 ...
先去检查下,我测试正常生成两个,只不过少了一个:
重新改了下,现在可以生成三个文件了,之前只生成两个是因为 c = 2 在循环内了
f = open(r'C:\Users\jiong\Desktop\record.txt')
bfile = open('boy_1.txt', 'a')
gfile = open('girl_1.txt', 'a')
c = 2
for each in f:
filenameb = 'boy_' + str(c) + '.txt'
filenameg = 'girl_' + str(c) + '.txt'
if each == '======':
bfile.close()# 找到分隔符后,对之前的文件进行关闭保存
gfile.close()
bfile = open(filenameb, 'a')
gfile = open(filenameg, 'a')
c += 1
else:
(role, spoken) = each.split(':', 1)
if role == '小甲鱼':
bfile.write(spoken)
if role == '小客服':
gfile.write(spoken)
bfile.close()
gfile.close()
f.close()
Twilight6 发表于 2020-7-14 11:33
你文件内容有问题吧,我测试有生成文件,只不过少了一个
我找到了,但是有个问题请教一下。
我那个笨程序,生成的文件就在桌面。
但是您的程序生成在'''***\AppData\Local\Programs\Python\Python38-32'''为什么呢 jiong_jiong 发表于 2020-7-14 11:47
我找到了,但是有个问题请教一下。
我那个笨程序,生成的文件就在桌面。
没加 open 准确路径,默认生成在脚本当前文件夹,如果是在 控制台运行,默认保存在 Python 安装路径 Twilight6 发表于 2020-7-14 11:48
没加 open 准确路径,默认生成在脚本当前文件夹,如果是在 控制台运行,默认保存在 Python 安装路径
我没听懂。
按理说,都是在控制台运行的啊。都是写的脚本,然后运行的。 jiong_jiong 发表于 2020-7-14 11:51
我没听懂。
按理说,都是在控制台运行的啊。都是写的脚本,然后运行的。
控制台直接运行是因为控制台这个程序保存在 安装目录
而你运行脚本是因为脚本所在目录是脚本的目录
你运行脚本时候,控制台工作目录会改变成脚本目录
Twilight6 发表于 2020-7-14 11:41
重新改了下,现在可以生成三个文件了,之前只生成两个是因为 c = 2 在循环内了
为什么一定需要先写02/03行呢??之前的问题在哪里?
bfile = open('boy_1.txt', 'a')
gfile = open('girl_1.txt', 'a') f = open(r'C:\Users\jiong\Desktop\record.txt')
c=1
##filenameb = 'boy_' + str(c) + '.txt'
##filenameg = 'girl_' + str(c) + '.txt'
##bfile = open(filenameb, 'a')
##gfile = open(filenameg, 'a')这几句放这里的话,filename不会变化,只会生成一个文件
for each in f:
filenameb = 'boy_' + str(c) + '.txt'
filenameg = 'girl_' + str(c) + '.txt'
bfile = open(filenameb, 'a')
gfile = open(filenameg, 'a')
if each != '======':
(role,spoken)=each.split(':',1)
if role == '小甲鱼':
bfile.write(spoken)
if role == '小客服':
gfile.write(spoken)
else:
bfile.close()
gfile.close()
c +=1
print('c=%d'%c)
bfile =open(filenameb,'a')
gfile =open(filenameg,'a')
bfile.close()
gfile.close()
f.close()
页:
[1]