标题: [问题求助] 这个文件处理的Python代码如何写 [打印本页]
作者: netdzb 时间: 2020-4-19 09:58 标题: 这个文件处理的Python代码如何写
下面是个示范文件
00:00:23.844 ---> 00:00:26.334
现在要求取出23.844和26.334这两个数据,然后把这2个数据分别加上1.5,
要求得到
00:00:25.344 ---> 00:00:27.834
然后存入新的文件。
23.844 ---> 00 // 前面提取的是这个字符串,如何去掉多余的部分?
26.334 // 后面那个字符串比较好提取
作者: wujunkai 时间: 2020-4-19 10:08
- >>> import re
- >>> text='00:00:23.844 ---> 00:00:26.334'
- >>> num=list(map(float,re.findall(r'\d+\.\d+',text)))
- >>> print(num)
- [23.844, 26.334]
- >>> for i in range(len(num)):
- num[i]+=1.5
- >>> print(num)
- [25.344, 27.834]
复制代码
回复 1# netdzb
作者: netdzb 时间: 2020-4-19 10:41
回复 2# wujunkai
num=list(map(float,re.findall(r'\d+\.\d+',text)))
// 这句话没怎么看懂,查了map的用法
// map(函数名,列表)
// 你的代码float代表函数,后面那个re的正则替换是一个列表
// 最后用float转换成浮点型数据
作者: wujunkai 时间: 2020-4-19 11:01
回复 3# netdzb
没错,但re.findall是正则查找所有符合条件的字符串,而不是正则替换。list是防止map在python3的环境下返回迭代器,提高兼容性
作者: netdzb 时间: 2020-4-19 13:07
回复 4# wujunkai
import re
text='''00:00:23.844 ---> 00:00:26.334
00:00:23.844 ---> 00:00:26.334
00:00:23.844 ---> 00:00:26.334
00:00:23.844 ---> 00:00:26.334
00:00:23.844 ---> 00:00:26.334'''
timeline = text.split('\n')
print timeline
for text in timeline:
num=list(map(float,re.findall(r'\d+\.\d+',text)))
print(num)
for i in range(len(num)):
num+=1.5
print(num)
我要想得到下面的结果,应该怎么改?
上面的代码是有问题的。
[25.344, 27.834]
[25.344, 27.834]
[25.344, 27.834]
[25.344, 27.834]
[25.344, 27.834]
作者: wujunkai 时间: 2020-4-19 13:15
本帖最后由 wujunkai 于 2020-4-19 13:16 编辑
回复 5# netdzb - import re
- text='''00:00:23.844 ---> 00:00:26.334
- 00:00:23.844 ---> 00:00:26.334
- 00:00:23.844 ---> 00:00:26.334
- 00:00:23.844 ---> 00:00:26.334
- 00:00:23.844 ---> 00:00:26.334'''
- timeline = text.split('\n')
- for text in timeline:
- num=list(map(float,re.findall(r'\d+\.\d+',text)))
- for i in range(len(num)):
- 'num+=1.5' ##你怎么能要求一个数组做出这么过分的事!!
- num[i]+=1.5
- print(num)
复制代码
作者: netdzb 时间: 2020-4-19 13:33
回复 6# wujunkai
num=list(map(float,re.findall(r'\d+\.\d+',text)))
这里是返回4个列表吧,如何让它变成1个列表?
如果这里变成1个列表,我就会写了。
作者: netdzb 时间: 2020-4-19 13:52
回复 6# wujunkai
ucdos = []
for text ine timeline:
num=list(map(float,re.findall(r'\d+\.\d+',text)))
ucdos.append(num)
这样返回的是列表中嵌套着列表,如果只是想把元素合并起来该怎么写?
就是一个列表合并了所有元素,不要存在嵌套。
作者: wujunkai 时间: 2020-4-19 14:05
回复 8# netdzb - ucdos = []
- for text ine timeline:
- num=list(map(float,re.findall(r'\d+\.\d+',text)))
- ucdos+=num
复制代码
list是可以相加的
作者: wujunkai 时间: 2020-4-19 14:07
回复 7# netdzb
要返回一个list,那你就不要分割text啊
作者: netdzb 时间: 2020-4-19 14:49
本帖最后由 netdzb 于 2020-4-19 15:01 编辑
回复 10# wujunkai
分割的地方写的不够精确,
谢谢提醒。
作者: netdzb 时间: 2020-4-19 16:42
回复 10# wujunkai
还是存在一个问题,有时候会输出类似10.02999999的这种数据,不知道如何改正过来。
作者: wujunkai 时间: 2020-4-19 16:46
回复 12# netdzb
这种事你去找IEEE
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |