Board logo

标题: [问题求助] 这个文件处理的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

  1. >>> import re
  2. >>> text='00:00:23.844 ---> 00:00:26.334'
  3. >>> num=list(map(float,re.findall(r'\d+\.\d+',text)))
  4. >>> print(num)
  5. [23.844, 26.334]
  6. >>> for i in range(len(num)):
  7. num[i]+=1.5
  8. >>> print(num)
  9. [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
  1. import re
  2. text='''00:00:23.844 ---> 00:00:26.334
  3. 00:00:23.844 ---> 00:00:26.334
  4. 00:00:23.844 ---> 00:00:26.334
  5. 00:00:23.844 ---> 00:00:26.334
  6. 00:00:23.844 ---> 00:00:26.334'''
  7. timeline = text.split('\n')
  8. for text in timeline:
  9.     num=list(map(float,re.findall(r'\d+\.\d+',text)))
  10.     for i in range(len(num)):
  11.         'num+=1.5' ##你怎么能要求一个数组做出这么过分的事!!
  12.         num[i]+=1.5
  13.     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
  1. ucdos = []
  2. for text ine timeline:
  3.     num=list(map(float,re.findall(r'\d+\.\d+',text)))
  4.     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