jiong_jiong 发表于 2020-7-14 11:14:37

第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()

Twilight6 发表于 2020-7-14 11:15:55


'w' 写入是覆盖写入,你应该改成 'a'

用 w 每次循环都会重新创建个空白文件来覆盖上次的文件内容

jiong_jiong 发表于 2020-7-14 11:23:03

Twilight6 发表于 2020-7-14 11:15
'w' 写入是覆盖写入,你应该改成 'a'

用 w 每次循环都会重新创建个空白文件来覆盖上次的文件内容

已改,但是不行。
连空文件都没有。

Twilight6 发表于 2020-7-14 11:25:49

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()

jiong_jiong 发表于 2020-7-14 11:29:04

Twilight6 发表于 2020-7-14 11:25


已测试,还是不行。没有新文件生成。

Twilight6 发表于 2020-7-14 11:33:17

jiong_jiong 发表于 2020-7-14 11:29
已测试,还是不行。没有新文件生成。



你文件内容有问题吧,我测试有生成文件,只不过少了一个

jiong_jiong 发表于 2020-7-14 11:34:55

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()

Twilight6 发表于 2020-7-14 11:36:31

jiong_jiong 发表于 2020-7-14 11:34
应该不会哦,我课前有写一个很笨的程序,是可以生成的。我又去检查一下了原文件,是OK的。

以下是笨程 ...



先去检查下,我测试正常生成两个,只不过少了一个:

Twilight6 发表于 2020-7-14 11:41:43


重新改了下,现在可以生成三个文件了,之前只生成两个是因为 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()

jiong_jiong 发表于 2020-7-14 11:47:12

Twilight6 发表于 2020-7-14 11:33
你文件内容有问题吧,我测试有生成文件,只不过少了一个

我找到了,但是有个问题请教一下。
我那个笨程序,生成的文件就在桌面。

但是您的程序生成在'''***\AppData\Local\Programs\Python\Python38-32'''为什么呢

Twilight6 发表于 2020-7-14 11:48:24

jiong_jiong 发表于 2020-7-14 11:47
我找到了,但是有个问题请教一下。
我那个笨程序,生成的文件就在桌面。



没加 open 准确路径,默认生成在脚本当前文件夹,如果是在 控制台运行,默认保存在 Python 安装路径

jiong_jiong 发表于 2020-7-14 11:51:18

Twilight6 发表于 2020-7-14 11:48
没加 open 准确路径,默认生成在脚本当前文件夹,如果是在 控制台运行,默认保存在 Python 安装路径

我没听懂。
按理说,都是在控制台运行的啊。都是写的脚本,然后运行的。

Twilight6 发表于 2020-7-14 11:53:01

jiong_jiong 发表于 2020-7-14 11:51
我没听懂。
按理说,都是在控制台运行的啊。都是写的脚本,然后运行的。


控制台直接运行是因为控制台这个程序保存在 安装目录

而你运行脚本是因为脚本所在目录是脚本的目录

你运行脚本时候,控制台工作目录会改变成脚本目录

jiong_jiong 发表于 2020-7-14 11:54:29

Twilight6 发表于 2020-7-14 11:41
重新改了下,现在可以生成三个文件了,之前只生成两个是因为 c = 2 在循环内了

为什么一定需要先写02/03行呢??之前的问题在哪里?
bfile = open('boy_1.txt', 'a')
gfile = open('girl_1.txt', 'a')

jiong_jiong 发表于 2020-7-14 13:46:16

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]
查看完整版本: 第029讲课堂作业,分割客服问答文件