标题: [文本处理] [已解决]如何获取指定位置的数值进行相应计算并将结果替换掉原数值? [打印本页]
作者: 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- with open('new.txt', 'w') as write_file:
- [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 编辑
- """
- python文本数据提取计算.py
- http://bbs.bathome.net/thread-39649-1-1.html
- codegay 2016年3月11日 23:27:16
-
- """
- import random
- import re
-
- #生成测试数据
- with open("a.txt","w+") as f:
- [f.write("exp= "+str(random.randint(1,9999))+"\n") for r in range(1,33)]
-
- #读取数据,懒得写正则了,假设数据格式严格:exp= 数值
- with open("a.txt") as f:
- txt=[r.split("=")[1].strip() for r in f.readlines()]
-
- results=["exp= "+str(float(r)/4)+"\n" for r in txt]
-
- with open("b.txt","w+") as f:
- f.writelines(results)
- #2016年3月12日 00:11:08
复制代码
作者: hfstar 时间: 2016-3-12 10:00
请问各位大神,你们发的代码是放在dos里还是批处理里运行的- with open('new.txt', 'w') as write_file:
- [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 - @echo off
- setlocal enabledelayedexpansion
- (for /f "tokens=1* delims=:" %%a in ('findstr /n .* a.txt') do (
- set L=%%b
- set L=!L: =!
- if /i "!L:~0,4!"=="exp=" (
- set /a "L=!L:~4!>>2"
- echo Exp = !L!
- ) else (echo;%%b)
- ))>你要的.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 编辑
- """
- python文本数据提取计算.py
- http://bbs.bathome.net/thread-39649-1-1.html
- codegay 2016年3月12日 12:19:56
-
- """
- import random
- import re
- import shutil
- #测试数据
- shutil.copy("test.txt","a.txt")
-
- outf=open("b.txt","w+",encoding="utf-8")
- 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")
-
-
- #读取数据,懒得写正则了,假设数据格式严格:exp= 数值
- with open("a.txt",encoding="utf-8") as f:
- txt=[t(r,outf) for r in f.readlines()]
- outf.close()
-
- #设置a为源文件,处理过的数据临时写入b,程序结束后,复制b覆盖a
- shutil.copy("b.txt","a.txt")
- #2016年3月12日 12:50:13
复制代码
作者: hfstar 时间: 2016-3-12 15:08
回复 14# codegay
谢谢各位大神们,各位大神辛苦了
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |