作者TZULIU (消费券收购商)
看板Python
标题[问题] 读取会议文件遇到问题
时间Wed Jan 30 12:08:39 2019
我打算分析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://webptt.com/cn.aspx?n=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
1F:推 lajji: 用冒号当分隔符存成csv? 01/30 12:20
2F:推 TitanEric: 你把名字放进name list之後 在下一段应该是讲话内容 01/30 13:27
3F:→ TitanEric: 所以你就 Name.pop() 可以把上一个放进的名字拿出来 01/30 13:28
4F:→ TitanEric: 当然 应该用一个变数去存上一个名字就可以 不用list 01/30 13:28
两位高手的建议因为文件结构应该无法运行,把冒号当分隔符取出发言者没问题,
但是发言内容可能会有很多行。假设我资料的第一行是 「小明:」,然後接下来的
八行都是小明发言的内容,然後再下一行(第十行)是「小华:」,然後接下来的五行
都是小华的发言内容,我的问题是,我应该怎样让电脑知道,在读完第九行之後,
创建一个list如["小明","八行内容"],然後再读取剩下的六行,然後在最後创立一个
list为["小华","五行内容"]。谢谢!
※ 编辑: TZULIU (168.150.122.93), 01/30/2019 14:21:08
5F:推 highpower: 当某行出现冒号时,就表示新的发言者出现 01/30 15:08
6F:推 yangs0618: 那请问一下会有一句话讲完没换行直接出现另个名字吗 01/30 19:01
7F:推 yangs0618: 如果一个人讲完一定换行 可以用到if “:” in line: 01/30 19:03
8F:→ yangs0618: 暂存的text append进sentence else: text.extend(line) 01/30 19:04
9F:推 TitanEric: 楼上方法记句子 另一个变数记名字 遇到名字丢进list 01/31 00:48
10F:→ nini200: 只用:判断 後面不同人的发言 没法分类正确吧? 01/31 01:29
11F:推 nini200: 大致上有写出来了 给你参考 01/31 05:18
12F:→ nini200: 先找出所有说话者 重复的用集合去掉 01/31 05:19
13F:→ nini200: 我的方法 A阵列储存要的名字行号B阵列储存非要的名字行号 01/31 05:21
14F:→ nini200: C阵列将AB阵列合并例A=[0,9]B=[3,6,11]C=[0,3,6,9,11,16] 01/31 05:24
15F:→ nini200: 0-3 9-11就是要的内容 C阵列16是最後一行 01/31 05:28
16F:→ nini200: 打错 B阵列储存非要名字含冒号的行号 01/31 05:29
17F:→ nini200: 我的方法比较麻烦 有更好方法烦请告知 01/31 05:37
18F:推 jasonfghx: WOW 01/31 09:50
感谢各位先进的帮忙,我昨晚和今天早上又想了一下加问了一下朋友,
以下是我现在的作法(有点笨但是对於我这种非高手比较容易理解):
##先读取文件的每一行并建立一个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
19F:推 nini200: 谢谢分享 01/31 21:12
20F:推 lemon651: 干麻那麽麻烦 就用你原本的方法不好吗? 直接用一个空字 02/01 11:02
21F:→ lemon651: 串不停的加就好了阿 02/01 11:02
22F:推 lemon651: 遇到冒号就append字串 再append名字 然後字串加後面的li 02/01 11:04
23F:→ lemon651: ne 再遇到冒号之前不停的加 缺点就是第一格会是空字串 02/01 11:05
24F:→ lemon651: 但是remove掉就好了 用deque的话可以省remove掉的时间 02/01 11:05