找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 31026|回复: 14

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

[复制链接]
发表于 2016-3-11 23:04:14 | 显示全部楼层 |阅读模式
本帖最后由 pcl_test 于 2016-3-12 14:11 编辑

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

  exp=  172

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

exp=  数字÷4 并算出结果

如 exp=  43
    exp=  92.25
.........
以此类推
能用批处理或者什么脚本实现吗

评分

参与人数 1PB -4 收起 理由
pcl_test -4 未按版规发帖

查看全部评分

发表于 2016-3-12 00:00:45 | 显示全部楼层
本帖最后由 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


能看懂吗,哈哈,缩成两行了

评分

参与人数 1技术 +1 收起 理由
codegay + 1 1

查看全部评分

发表于 2016-3-12 00:04:49 | 显示全部楼层
回复 2# ivor


    with语句不用加close。自动管理。
发表于 2016-3-12 00:05:28 | 显示全部楼层
哦,看错了。是上一个文件句柄的。
发表于 2016-3-12 00:09:20 | 显示全部楼层
回复 4# codegay


    看我更新了的代码,给加分不,和你有得一拼吧
发表于 2016-3-12 00:13:05 | 显示全部楼层
回复 2# ivor


    哈哈,我是老鸟。绝对无压力。
发表于 2016-3-12 00:13:39 | 显示全部楼层
本帖最后由 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
复制代码
 楼主| 发表于 2016-3-12 10:00:57 | 显示全部楼层
请问各位大神,你们发的代码是放在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')]
复制代码
这个代码用什么方式运行
 楼主| 发表于 2016-3-12 10:02:29 | 显示全部楼层
回复 1# hfstar


    真是抱歉,很久没有上这个论坛了,我以为没有同样问题的帖子所以,久直接发帖向大家求教了.没有想到违规了
 楼主| 发表于 2016-3-12 11:30:50 | 显示全部楼层
还是没有解决,这样,我把这个文本上传,请大神们帮我一下.把里面的带 Exp = 数字 的行都处理成 Exp = 数字÷4 的运算结果,请各位帮小弟一下
发表于 2016-3-12 12:10:49 | 显示全部楼层
本帖最后由 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
复制代码
 楼主| 发表于 2016-3-12 12:16:32 | 显示全部楼层
回复 11# happy886rr


    多谢了,能把214.50后面的小数点包括小数点后面的.50去掉吗,只要整数
 楼主| 发表于 2016-3-12 12:41:57 | 显示全部楼层
回复 11# happy886rr

已经完美解决了,谢谢大神,大神一定是批处理高手
发表于 2016-3-12 12:52:06 | 显示全部楼层
本帖最后由 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
复制代码
 楼主| 发表于 2016-3-12 15:08:25 | 显示全部楼层
回复 14# codegay


    谢谢各位大神们,各位大神辛苦了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 22:35 , Processed in 0.024661 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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