搜尋

首頁  >  問答  >  主體

python - 运行成功,但是没相应的文件生成

       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... 是这个视频里的

大家讲道理大家讲道理2802 天前868

全部回覆(4)我來回復

  • 天蓬老师

    天蓬老师2017-04-18 10:20:13

    已經成功了 搜尋關鍵字發現在工作環境裡


    另外'e:test/dialogue.txt' 當前者//,後者可以//或或/或;當前者/,後者也只能單斜。


    有興趣的可以試試 並tell me why

    回覆
    0
  • PHPz

    PHPz2017-04-18 10:20:13

    報錯資訊也不貼好點, 好像是這句程式碼引發的錯誤 (role,line_spoken) = each_line.split(':', 1)
    當 each_line 變數中不包含 : 就會引發錯誤

    回覆
    0
  • 阿神

    阿神2017-04-18 10:20:13

    編碼的問題在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()

    回覆
    0
  • 高洛峰

    高洛峰2017-04-18 10:20:13

    我覺得應該是全角、半角的問題。
    不過你這種方式並不適合容錯。
    我的建議是:

    split_result = each_line.split(':', 1)
    if len(split_result) < 2:
        raise RuntimeError()
    (role,line_spoken) = (split_result[0], split_result[1])

    回覆
    0
  • 取消回覆