python - 运行成功,但是没相应的文件生成
大家讲道理
大家讲道理 2017-04-18 10:18:13
0
4
865
       def save_file(boy,girl,count):
            file_name_boy = 'boy' + str(count) + '.txt'
            file_name_girl = 'girl' + str(count) + '.txt'
        
            boy_file = open(file_name_boy, 'w')
            girl_file = open(file_name_girl, 'w')
        
            boy_file.writelines(boy)
            girl_file.writelines(girl)
            boy_file.close()
            girl_file.close()            #把两人的对话分别放到命名不同的文件里
        def split_file(file_name):
            f = open('E:/test/dialogue.txt')
            boy=[]
            girl=[]
            count=1
            for each_line in f:
                if each_line[:6] != '======':
                    (role,line_spoken) = each_line.split(':', 1)   #每行按照:分割成1+1个子字符串,分别赋值给=前面的对象
                    if role == '小甲鱼':
                        boy.append(line_spoken)
                    if role == '小客服':
                        girl.append(line_spoken)
                else:
                    save_file(boy,girl,count)
                    boy = []
                    girl = []
                    count += 1
            save_file(boy,girl,count)
            f.close()
        split_file('E:/test/dialogue.txt')
E:\Python\python.exe "E:/PyCharm 2016.3.2/testest/abc/filelearn_01.py"

Process finished with exit code 0

http://edu.csdn.net/course/de... 是这个视频里的

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

Antworte allen(4)
Peter_Zhu

已经成功了 搜索关键字发现在工作环境里


另外'e:\test/dialogue.txt' 当前者//\,后者可以//或\或/或;当前者/,后者也只能单斜。


有兴趣的可以试试 并tell me why

PHPzhong

报错信息也不贴好点, 好像是这句代码引发的错误 (role,line_spoken) = each_line.split(':', 1)
当 each_line 变量中不包含 : 就会引发错误

阿神

编码的问题在python2中会有比较大的影响,所以要特别注意;

  1. windows下记事本保存的时候默认编码是GBK,而python2是按unicode来处理,所以在打开文件的时候,建议先把编码转换为unicode,以避免更多的问题;

  2. 另外,记事本的换行符是"\n",python读取文件的时候也会把换行符读取出来,这也有可能对你后续的处理造成不必要的麻烦,建议去除换行符;

  3. 然后就是冒号的问题了,造成报错的原因就是split方法在each_line这个字符串中找不到你代码给的冒号。你给的冒号是英文状态下的冒号,而文件内是中文状态下的冒号。但是如果你直接修改为中文状态的冒号,所以也需要统一成unicode字符串的中文冒号;

  4. 接下来就是 role == '小甲鱼' 这种中文对比的情况了,还是需要告诉python,你是用的unicode的字符串,这样才能相对准确的去做对比。

def split_file(file_name):
    f = open('E:/test/dialogue.txt')
    boy=[]
    girl=[]
    count=1
    for each_line in f:
        each_line = each_line.strip().decode('gbk') # strip()方法用来去掉"\n";decode()方法用来把编码从gbk解码到unicode
        if each_line[:6] != '======':
            # (role,line_spoken) = each_line.split(':', 1)   #每行按照:分割成1+1个子字符串,分别赋值给=前面的对象
            (role,line_spoken) = each_line.split(u':', 1)   #注意这里的冒号是中文的冒号,u是告诉python这是个unicode的字符串
            # if role == '小甲鱼':
            if role == u'小甲鱼':
                boy.append(line_spoken)
            # if role == '小客服':
            if role == u'小客服':
                girl.append(line_spoken)
        else:
            save_file(boy,girl,count)
            boy = []
            girl = []
            count += 1
    save_file(boy,girl,count)
    f.close()
小葫芦

我觉得应该是全角、半角的问题。
不过你这种方式并不适合容错。
我的建议是:

split_result = each_line.split(':', 1)
if len(split_result) < 2:
    raise RuntimeError()
(role,line_spoken) = (split_result[0], split_result[1])
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage