找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 5837|回复: 9

[求助] pathon正则匹配

3

主题

7

帖子

7

积分

贫民

积分
7
yangyang- 发表于 2018-7-6 00:14:58 | 显示全部楼层 |阅读模式
我想实现文本的批量操作,如下:操作前
458004004093851.wav

00:00:2~00:00:4|客服|否|10|您好请问什么可以帮您
00:00:4~00:00:11|客户|否|15|嗯你好能不能我查一个查个呃账号
00:00:11~00:00:15|客服|否|19|先生查下全部的卡号吗还是卡片的什么信息
00:00:15~00:00:24|客户|否|31|呃我就是想查一下我可我卡上呃你余额今他给我这样打上钱打上了没有
00:00:25~00:00:27|客服|否|9|是查下卡内余额是吗
00:00:27~00:00:28|客户|否|2|啊对
00:00:28~00:00:31|客服|否|13|先生卡片后四位是幺四六八吗
00:00:31~00:00:32|客户|否|2|嗯对
00:00:32~00:00:34|客服|否|8|请问持卡人姓名是
00:00:34~00:00:37|客户|否|4|嗯刘慧娟
00:00:37~00:00:43|客服|否|32|那稍后将为您转到语音麻烦您输一下卡片的六位交易密码按井号返回好吗
00:00:43~00:00:44|客户|否|3|呃行行



操作后
458004004093851.wav

-A 您好请问什么可以帮您
-B 嗯你好能不能我查一个查个呃账号
-A 先生查下全部的卡号吗还是卡片的什么信息
-B 呃我就是想查一下我可我卡上呃你余额今他给我这样打上钱打上了没有
-A 是查下卡内余额是吗
-B 啊对
-A 先生卡片后四位是幺四六八吗
-B 嗯对
-A 请问持卡人姓名是
-B 嗯刘慧娟
-A 那稍后将为您转到语音麻烦您输一下卡片的六位交易密码按井号返回好吗
-B 呃行行


下面是我写的一点点代码:
import functools
import os,sys
import re

filepath = 'H:\\Python 3.7\\py\\458004004093851.wav.txt'
file_object = open(filepath,'r+')
try:
    all_the_text = file_object.read()
    print(all_the_text)
    replace_file1 = re.sub(r'客服','A',all_the_text)
    print(replace_file1)
    replace_file2 = re.sub(r'客户','B',replace_file1)
    print(replace_file2)
    replace_file3 = re.compile('^')
    replace_file4 = re.sub(replace_file3,'-',replace_file2)
    print(replace_file4)
finally:
    file_object.close()

怎么用正则匹配进行批量替换阿?
回复

使用道具 举报

0

主题

956

帖子

956

积分

圣骑士

积分
956
sheeboard 发表于 2018-7-6 10:11:30 | 显示全部楼层
本帖最后由 sheeboard 于 2018-7-6 10:13 编辑

不需要正则。


Screenshot from 2018-07-06 10-03-56.png
Screenshot from 2018-07-06 10-04-31.png
回复 支持 反对

使用道具 举报

3

主题

7

帖子

7

积分

贫民

积分
7
yangyang-  楼主| 发表于 2018-7-6 10:24:34 | 显示全部楼层

谢谢,但是这么实现是有问题的,因为不是一行是A,下一行就是B,我是把所有“客服”字符替换为A,“客户”字符替换为B,而连续两行甚至三行都有可能是A,不能用奇偶来判断,所以想用正则匹配。
回复 支持 反对

使用道具 举报

3

主题

278

帖子

278

积分

侠客

积分
278

热心会员

uitb 发表于 2018-7-6 11:11:17 | 显示全部楼层
这么标准的csv格式,当然是用csv操作啦,我想到的是用pandas来读csv文件,然后它里面好像有个where语句进行条件判断,可以批量匹配替换你的客户、客服关键词啦,然后再to_csv 就轻轻松松的搞定
回复 支持 反对

使用道具 举报

0

主题

956

帖子

956

积分

圣骑士

积分
956
sheeboard 发表于 2018-7-6 12:06:14 | 显示全部楼层
uitb 发表于 2018-7-6 11:11
这么标准的csv格式,当然是用csv操作啦,我想到的是用pandas来读csv文件,然后它里面好像有个where语句进行 ...

df=pd.read_csv('reg.txt',sep="|",header=None)
df.replace({1:{"客服":"A","客户":"B"}})
out=df[[1,4]]
out.to_csv('out.txt',index=None,header=False,sep=' ')

确实很方便,不过有点大材小用。

python新一行的问题没注意过,一直以为是\n\r,我去查一下。
回复 支持 反对

使用道具 举报

0

主题

956

帖子

956

积分

圣骑士

积分
956
sheeboard 发表于 2018-7-6 12:09:20 | 显示全部楼层
lz能上传个多行的测试文件吗,我没windows系统的。
回复 支持 反对

使用道具 举报

3

主题

7

帖子

7

积分

贫民

积分
7
yangyang-  楼主| 发表于 2018-7-6 14:08:31 | 显示全部楼层
sheeboard 发表于 2018-7-6 12:09
lz能上传个多行的测试文件吗,我没windows系统的。

458007003570756.wav.txt (1.91 KB, 下载次数: 1)
回复 支持 反对

使用道具 举报

0

主题

956

帖子

956

积分

圣骑士

积分
956
sheeboard 发表于 2018-7-6 16:21:06 | 显示全部楼层
本帖最后由 sheeboard 于 2018-7-6 16:23 编辑

看看还有什么问题
那个 多行 别管了,是我想多了。
Screenshot from 2018-07-06 16-19-27.png
回复 支持 反对

使用道具 举报

3

主题

7

帖子

7

积分

贫民

积分
7
yangyang-  楼主| 发表于 2018-7-10 09:18:27 来自手机 | 显示全部楼层
import re import os  path='H:\\Python 3.7\\py\\origin' dirlist=os.listdir(path) for i in range(0,len(dirlist)):     newpath=os.path.join(path,dirlist[i])     allfilename=open(newpath,'r+',encoding='utf-8')     alltext=allfilename.read()     print(newpath)     print(alltext)     titlename = newpath.split('\\')[-1]     print(titlename)     try:         with allfilename as f,open(newpath,'a',encoding='utf-8') as g:             g.write(titlename + '\t' + '0.02' + '\n')             print('-------')             for line in f:                 print('替换开始')                 line = line.split('|')                 if line[1] == '客服':                     g.write('-A '+line[4])                 elif line[1] == '客户':                     g.write('-B '+line[4])     finally:         allfilename.close()能在帮我看一下吗  我这个为什么进不去for  line  in循环中,这段是想实现遍历目录下所有文件,并批量替换所有文件中的字符。
回复 支持 反对

使用道具 举报

0

主题

956

帖子

956

积分

圣骑士

积分
956
sheeboard 发表于 2018-7-10 09:24:24 | 显示全部楼层
本帖最后由 sheeboard 于 2018-7-10 10:06 编辑

文件遍历用glob.glob就可以了,with open(file)是自动关闭文件的不用close。
改后的文件名再处理一下。


Screenshot from 2018-07-10 10-04-36.png
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表