導出QQ聊天記錄並用python處理


今天和天天弟弟聊天,很有感慨,想把聊天記錄保存下來(QQ),教程如下。

STEP1  從QQ里導出聊天記錄

有兩個方法導出:(1)打開聊天窗口中的“聊天記錄”,右下角是消息管理器,打開,在想要保存記錄的群/好友圖標上右鍵→導出。

                             (2)打開扣扣主面板,點擊設置→消息管理器,后面的步驟同上。

注意,可以保存成.bak和.txt,我主要是用txt文件。

STEP2  使用python進行處理

直接導出的txt文本是這樣的:

看着有點累,我更喜歡這種簡介明了的對話形式:

A:...................

B:...................

那么,就處理吧。代碼如下:

 1 pathr=r"C:\Users\Lenovo\Desktop\20200507.txt"
 2 fr=open(pathr,'r',encoding='utf-8')#txt編碼類型可以在notepad中查看
 3 fw=open("C:\\Users\\Lenovo\\Desktop\\process20200507.txt",'a')
 4 flag=-1#0是天天,1是冬冬,2是表情包hhhh
 5 for line in fr:#不要忘記冒號
 6     if line.isspace()==True:#如果一行只有表情,導成txt只顯示一個空行
 7         continue#直接讀下一行
 8     if ("2020" in line) and ("天天" in line):#天天說的話
 9         flag=0 
10         continue
11     elif ("2020" in line) and ("冬冬" in line):#我說的話
12         flag=1
13         continue
14     elif ("[圖片]" in line):#單發了一個表情包
15         flag=2
16         continue
17     if flag==0:
18         fw.write("天天:"+line+"\n")
19         flag=-1
20     elif flag==1:
21         fw.write("冬冬:"+line+"\n")
22         flag=-1
23 fr.close()#不要忘記關閉文件
24 fw.close()

是不是覺得分支很多,還用了flag輔助QAQ

emm...其實如果用readline()就沒有這個問題,當前行如果是“2020-5-7xxxxx冬冬”(說話人信息),那就直接再用readline()去讀下一行。但我的spyder和pycharm由於安裝不當,使用時存在許多問題,readline()無法直接使用,需要import一下,但在命令行pip install readline,又頻頻失敗。我早就體會過pip失敗后修復的困難了,所以再嘗試二三后,果斷放棄使用這個函數。百度一番,讀取文件的一行還可以直接for line in……(這種簡單的文件操作還要百度一下,可見我真的不太用心,記不住啊!!)。

使用readline()的代碼是這樣的:(沒跑通,不知道有沒有小問題,而且沒處理行為空的情況)

 1 fr=open("C:\\Users\\Lenovo\\Desktop\\20200507.txt",'r',encoding='utf-8')
 2 fw=open("C:\\Users\\Lenovo\\Desktop\\process20200507.txt",'a')
 3 while(1):
 4     line=fr.readline()
 5     if ("2020" in line) and ("天天" in line):
 6         line=readline();
 7         fw.write("天天:"+line+"\n")
 8     elif ("2020" in line) and ("冬冬" in line):
 9         line=readline();
10         fw.write("冬冬:"+line+"\n")
11 fp.close()
12 fw.close()

 處理后的聊天記錄文件是這樣的,清爽多了:

 

-----------------------------------------------------------------------------------------------------------------------------------------------------------

-----------------------------------------------------------------------------------------------------------------------------------------------------------

以下記錄一下這短短的代碼編寫中遇到的問題和查到的一些東西:(其實以前全都接觸過,只是我一直沒用心記,所以逼着自己寫下來)

  • Python文件讀寫操作
f=open("xxx.txt","a+")

#若干操作
cdy="hhh"
f.write("JLU"+cdy+"\n")

f.close()

讀寫模式

模式 可做操作 若文件不存在 是否覆蓋 指針位置
r 只能讀 報錯 - 0
r+ 可讀可寫 報錯 0
w 只能寫 創建 0
w+ 可寫可讀 創建 0
a 只能寫 創建 否,追加寫 最后
a+ 可讀可寫 創建 否,追加寫 最后

路徑:

參考:https://blog.csdn.net/weixin_41811657/article/details/85158003

python讀文件需要輸入的目錄參數,列出以下例子:

path = r"C:\Windows\temp\readme.txt"

path1 = r"c:\windows\temp\readme.txt"

path2 = "c:\\windows\\temp\\readme.txt"

path3 = "c:/windows/temp/readme.txt"

打開文件函數open()中的參數可以是path也可以是path1、path2、path3。

path:"\"為字符串中的特殊字符,加上r后變為原始字符串,則不會對字符串中的"\t"、"\r" 進行字符串轉義

path1:大小寫不影響windows定位到文件

path2:用一個"\"取消第二個"\"的特殊轉義作用,即為"\\"

path3:用正斜杠做目錄分隔符也可以轉到對應目錄,並且在python中path3的方式也省去了反斜杠\轉義的煩惱

 

按行讀取文件:

參考:https://www.cnblogs.com/aiyue443/p/9774932.html

(1)通過readline()來進行讀取

f = open('xxx/xxx/1.tcl')

line = f.readline()

但是這個只是讀取文件的第一行。如何循環使用呢?

while line:

  print line,   #后面跟,表示忽略換行符。

  line = f.readline()  # 繼續讀取下一行

f.close()

(2)  第二種方法

for line in open('xxx/xx/1.tcl'):

  print line

 

一些報錯:

 

1 SyntaxError: invalid syntax
  • 忘記在 if , elif , else , for , while , class ,def 聲明末尾添加 冒號( : );
  • 誤將 = 當成 == 使用;
  • 錯誤的縮進
2

UnicodeDecodeError: 'gbk' codec can't decode byte 0xbf in position 2: illegal multibyte sequence

  •  用notepad打開txt文件,把編碼格式改成utf-8,再在open()里加上對應的encoding參數
     fr=open(pathr,'r',encoding='utf-8')
  • python是 外部文件編碼->內部編碼->目標編碼,這個報錯的意思,是當內部編碼轉化成 gbk編碼(默認)時出錯

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM