Board logo

标题: [文本处理] [已解决]如何获取指定位置的数值进行相应计算并将结果替换掉原数值? [打印本页]

作者: hfstar    时间: 2016-3-11 23:04     标题: [已解决]如何获取指定位置的数值进行相应计算并将结果替换掉原数值?

本帖最后由 pcl_test 于 2016-3-12 14:11 编辑

我有很多行这样的文本,不知道怎样替换,请高手指点一下

  exp=  172

exp=  369
.........
exp=  96999999
......
我想把此行替换为

exp=  数字÷4 并算出结果

如 exp=  43
    exp=  92.25
.........
以此类推
能用批处理或者什么脚本实现吗
作者: ivor    时间: 2016-3-12 00:00

本帖最后由 ivor 于 2016-3-12 00:08 编辑

源文件:a.txt     生成新文件:new.txt
  1. with open('new.txt', 'w') as write_file:
  2.     [print('%s=%s' % (i.strip().split('=')[0],int(i.strip().split('=')[1])/4), file=write_file) for i in open('a.txt','r')]
复制代码
回复 1# hfstar


能看懂吗,哈哈,缩成两行了
作者: codegay    时间: 2016-3-12 00:04

回复 2# ivor


    with语句不用加close。自动管理。
作者: codegay    时间: 2016-3-12 00:05

哦,看错了。是上一个文件句柄的。
作者: ivor    时间: 2016-3-12 00:09

回复 4# codegay


    看我更新了的代码,给加分不,和你有得一拼吧
作者: codegay    时间: 2016-3-12 00:13

回复 2# ivor


    哈哈,我是老鸟。绝对无压力。
作者: codegay    时间: 2016-3-12 00:13

本帖最后由 codegay 于 2016-3-12 00:20 编辑
  1. """
  2. python文本数据提取计算.py
  3. http://bbs.bathome.net/thread-39649-1-1.html
  4. codegay 2016年3月11日 23:27:16
  5. """
  6. import random
  7. import re
  8. #生成测试数据
  9. with open("a.txt","w+") as f:
  10.     [f.write("exp= "+str(random.randint(1,9999))+"\n") for r in range(1,33)]
  11. #读取数据,懒得写正则了,假设数据格式严格:exp= 数值
  12. with open("a.txt") as f:
  13.     txt=[r.split("=")[1].strip() for r in f.readlines()]
  14. results=["exp= "+str(float(r)/4)+"\n" for r in txt]
  15. with open("b.txt","w+") as f:
  16.     f.writelines(results)
  17.     #2016年3月12日 00:11:08
复制代码

作者: hfstar    时间: 2016-3-12 10:00

请问各位大神,你们发的代码是放在dos里还是批处理里运行的
  1. with open('new.txt', 'w') as write_file:
  2.     [print('%s=%s' % (i.strip().split('=')[0],int(i.strip().split('=')[1])/4), file=write_file) for i in open('a.txt','r')]
复制代码
这个代码用什么方式运行
作者: hfstar    时间: 2016-3-12 10:02

回复 1# hfstar


    真是抱歉,很久没有上这个论坛了,我以为没有同样问题的帖子所以,久直接发帖向大家求教了.没有想到违规了
作者: hfstar    时间: 2016-3-12 11:30

还是没有解决,这样,我把这个文本上传,请大神们帮我一下.把里面的带 Exp = 数字 的行都处理成 Exp = 数字÷4 的运算结果,请各位帮小弟一下
作者: happy886rr    时间: 2016-3-12 12:10

本帖最后由 happy886rr 于 2016-3-12 19:29 编辑

回复 10# hfstar
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. (for /f "tokens=1* delims=:" %%a in ('findstr  /n .* a.txt') do (
  4. set L=%%b
  5. set L=!L: =!
  6. if /i "!L:~0,4!"=="exp=" (
  7. set /a "L=!L:~4!>>2"
  8. echo Exp = !L!
  9. ) else (echo;%%b)
  10. ))>你要的.txt
复制代码

作者: hfstar    时间: 2016-3-12 12:16

回复 11# happy886rr


    多谢了,能把214.50后面的小数点包括小数点后面的.50去掉吗,只要整数
作者: hfstar    时间: 2016-3-12 12:41

回复 11# happy886rr

已经完美解决了,谢谢大神,大神一定是批处理高手
作者: codegay    时间: 2016-3-12 12:52

本帖最后由 codegay 于 2016-3-12 13:51 编辑
  1. """
  2. python文本数据提取计算.py
  3. http://bbs.bathome.net/thread-39649-1-1.html
  4. codegay 2016年3月12日 12:19:56
  5. """
  6. import random
  7. import re
  8. import shutil
  9. #测试数据
  10. shutil.copy("test.txt","a.txt")
  11. outf=open("b.txt","w+",encoding="utf-8")
  12. t=lambda x,y:y.write(x) if "Exp = " not in x else y.write(x.split("=")[0]+" = "+str(int(x.split("=")[1].strip())//4)+"\n")
  13. #读取数据,懒得写正则了,假设数据格式严格:exp= 数值
  14. with open("a.txt",encoding="utf-8") as f:
  15.     txt=[t(r,outf) for r in f.readlines()]
  16. outf.close()
  17. #设置a为源文件,处理过的数据临时写入b,程序结束后,复制b覆盖a
  18. shutil.copy("b.txt","a.txt")
  19. #2016年3月12日 12:50:13
复制代码

作者: hfstar    时间: 2016-3-12 15:08

回复 14# codegay


    谢谢各位大神们,各位大神辛苦了




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2