[問題] 讀取會議文件遇到問題

看板Python作者 (消費券收購商)時間6年前 (2019/01/30 12:08), 6年前編輯推噓11(11013)
留言24則, 7人參與, 6年前最新討論串1/1
我打算分析100多個會議文件, 範例如下:https://tinyurl.com/yalydvd8 但在分析之前,我想先將文件轉成資料儲存, 資料中的每一行,第一個數值是發言者,第二個數值是發言者的發言內容。 例如:["張三","我今天早上吃了一碗滷肉飯,超好吃的。"] 我目前的進度如下: Name = [] sentence = [] file = open('會議文件','r') for line in file: if line.find(':') != -1: tokens = line.split(":") Name.append(tokens[0]) else: sentence.append(line + " ") 我現在想不通該怎麼樣把得到的發言者姓名和內容放在一起, 然後再繼續找下一個發言者和發言內容。 還請各位高手幫忙解惑,謝謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 168.150.122.93 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1548821321.A.461.html ※ 編輯: TZULIU (168.150.122.93), 01/30/2019 12:17:39 ※ 編輯: TZULIU (168.150.122.93), 01/30/2019 12:19:54

01/30 12:20, 6年前 , 1F
用冒號當分隔符存成csv?
01/30 12:20, 1F

01/30 13:27, 6年前 , 2F
你把名字放進name list之後 在下一段應該是講話內容
01/30 13:27, 2F

01/30 13:28, 6年前 , 3F
所以你就 Name.pop() 可以把上一個放進的名字拿出來
01/30 13:28, 3F

01/30 13:28, 6年前 , 4F
當然 應該用一個變數去存上一個名字就可以 不用list
01/30 13:28, 4F
兩位高手的建議因為文件結構應該無法運行,把冒號當分隔符取出發言者沒問題, 但是發言內容可能會有很多行。假設我資料的第一行是 「小明:」,然後接下來的 八行都是小明發言的內容,然後再下一行(第十行)是「小華:」,然後接下來的五行 都是小華的發言內容,我的問題是,我應該怎樣讓電腦知道,在讀完第九行之後, 創建一個list如["小明","八行內容"],然後再讀取剩下的六行,然後在最後創立一個 list為["小華","五行內容"]。謝謝! ※ 編輯: TZULIU (168.150.122.93), 01/30/2019 14:21:08

01/30 15:08, 6年前 , 5F
當某行出現冒號時,就表示新的發言者出現
01/30 15:08, 5F

01/30 19:01, 6年前 , 6F
那請問一下會有一句話講完沒換行直接出現另個名字嗎
01/30 19:01, 6F

01/30 19:03, 6年前 , 7F
如果一個人講完一定換行 可以用到if “:” in line:
01/30 19:03, 7F

01/30 19:04, 6年前 , 8F
暫存的text append進sentence else: text.extend(line)
01/30 19:04, 8F

01/31 00:48, 6年前 , 9F
樓上方法記句子 另一個變數記名字 遇到名字丟進list
01/31 00:48, 9F

01/31 01:29, 6年前 , 10F
只用:判斷 後面不同人的發言 沒法分類正確吧?
01/31 01:29, 10F

01/31 05:18, 6年前 , 11F
大致上有寫出來了 給你參考
01/31 05:18, 11F

01/31 05:19, 6年前 , 12F
先找出所有說話者 重複的用集合去掉
01/31 05:19, 12F

01/31 05:21, 6年前 , 13F
我的方法 A陣列儲存要的名字行號B陣列儲存非要的名字行號
01/31 05:21, 13F

01/31 05:24, 6年前 , 14F
C陣列將AB陣列合併例A=[0,9]B=[3,6,11]C=[0,3,6,9,11,16]
01/31 05:24, 14F

01/31 05:28, 6年前 , 15F
0-3 9-11就是要的內容 C陣列16是最後一行
01/31 05:28, 15F

01/31 05:29, 6年前 , 16F
打錯 B陣列儲存非要名字含冒號的行號
01/31 05:29, 16F

01/31 05:37, 6年前 , 17F
我的方法比較麻煩 有更好方法煩請告知
01/31 05:37, 17F

01/31 09:50, 6年前 , 18F
WOW
01/31 09:50, 18F
感謝各位先進的幫忙,我昨晚和今天早上又想了一下加問了一下朋友, 以下是我現在的作法(有點笨但是對於我這種非高手比較容易理解): ##先讀取文件的每一行並建立一個list ##同時也創建一個index file = open('文件', 'r') All_lines = [] Names = [] length = 0 #Read all lines in the text file for line in file: if "Column" not in line: line = re.sub(r"(\d+\.?)", "", line) line = line.strip() if not line: continue else: All_lines.append(line.strip()) length += 1 else: continue ##以新建的list作為新文件並且抓取發言者及其發言並結何為一sub list for i in range(length): temp = [] if All_lines[i].find(':') != -1: #Split the name #Let's split the line into an array called "tokens" using the ":" as a separator: tokens = All_lines[i].split(":") #and let's extract the data: temp.append(tokens[0]) j = i + 1 while j < length and All_lines[j].find(':') == -1: #All_lines[j] = re.sub(r" ", "", All_lines[j]) temp.append(All_lines[j].strip()) j += 1 Names.append(temp) 還請各位高手賜教,謝謝! ※ 編輯: TZULIU (168.150.122.93), 01/31/2019 13:45:20

01/31 21:12, 6年前 , 19F
謝謝分享
01/31 21:12, 19F

02/01 11:02, 6年前 , 20F
幹麻那麼麻煩 就用你原本的方法不好嗎? 直接用一個空字
02/01 11:02, 20F

02/01 11:02, 6年前 , 21F
串不停的加就好了阿
02/01 11:02, 21F

02/01 11:04, 6年前 , 22F
遇到冒號就append字串 再append名字 然後字串加後面的li
02/01 11:04, 22F

02/01 11:05, 6年前 , 23F
ne 再遇到冒號之前不停的加 缺點就是第一格會是空字串
02/01 11:05, 23F

02/01 11:05, 6年前 , 24F
但是remove掉就好了 用deque的話可以省remove掉的時間
02/01 11:05, 24F
文章代碼(AID): #1SKID9HX (Python)
文章代碼(AID): #1SKID9HX (Python)