标题: [数值计算] [已解决]批处理如何计算出txt文本里每一行数字平均数 [打印本页]
作者: hepeisheng 时间: 2020-8-1 11:33 标题: [已解决]批处理如何计算出txt文本里每一行数字平均数
本帖最后由 hepeisheng 于 2020-8-7 23:42 编辑
在一个文件夹裏,有一个txt文件,和一个bat文件,双击bat文件,读取txt文件每行的数字求平均数,并写在txt文件的后面,如正确答案=-0.69%。有些正数可能没有前面的+号。
txt文本格式如下:
1.85%
1.68%
1.27%
+1.02%
+0.82%
+0.81%
+0.00%
+0.00%
-0.08%
-0.12%
-0.24%
-0.31%
-0.32%
-0.37%
-0.37%
-0.39%
-0.56%
-0.61%
-0.64%
-0.64%
-0.65%
-1.06%
-1.41%
-1.44%
-1.94%
-1.98%
-2.16%
-2.30%
-2.42%
-8.01%
作者: yhcfsr 时间: 2020-8-2 10:48
本帖最后由 yhcfsr 于 2020-8-2 10:52 编辑
系统要求:WIN7及以上
文件类型:bat- @Powershell "& {[ScriptBlock]::Create("'#' + ([io.file]::ReadAllText('%~f0',[text.encoding]::Default))").Invoke()}" & pause & exit
- $files = [io.directory]::GetFiles('./', '*.txt', 'AllDirectories');#获取所有txt文件
-
- foreach($file in $files)
- {
- [double] $result = 0.0;
- [int] $count = 0;
- [System.Collections.ArrayList] $content = [io.file]::ReadAllLines($file);#读取文件
-
- foreach($line in $content)
- {
- if($line -match '%')
- {
- $result +=[double]($line -replace '%');
- $count++;
- }
- }
-
- [void] $content.Add("`r`n={0:0.00}%" -f ($result/$count));
- [io.file]::WriteAllLines($file, $content);//保存文件
- }
复制代码
作者: xczxczxcz 时间: 2020-8-2 11:15
回复 2# yhcfsr
复杂化了,再简化,应该2一3句就可以了。
作者: ivor 时间: 2020-8-2 21:32
- import re, numpy as np
- with open('2.txt','r+') as file:
- file.write(str(np.average([float(result.group(0)) for i in file if isinstance((result := re.search('[+-]?\d?\.?\d+(?=%)',i)),re.Match)])))
复制代码
作者: Blakelee 时间: 2020-8-2 23:11
回复 4# ivor
这个是python代码?
作者: ivor 时间: 2020-8-3 09:59
回复 5# Blakelee
是的啊
作者: amwfjhh 时间: 2020-8-3 10:51
本帖最后由 amwfjhh 于 2020-8-3 11:05 编辑
- @if (0)==(0) echo off & setlocal enabledelayedexpansion
- set "nC=0" & set "nI=0" & (for /f "delims=" %%i in ('type num.txt') do ((for /f "delims=" %%a in ('cscript -nologo -e:jscript %~s0 "!nC!" "%%i" "+"') do set "nC=%%a") & set /a nI+=1 )) & cscript -nologo -e:jscript %~s0 "!nc!" "!nI!" "/" && pause && exit
- @end
- (function(args) {WScript.Echo(eval((/%/.test(args(0))?parseFloat(args(0))/100:parseFloat(args(0)))+args(2)+(/%/.test(args(1))?parseFloat(args(1))/100:parseFloat(args(1)))).toString());})(WScript.Arguments)
复制代码
作者: amwfjhh 时间: 2020-8-4 10:50
-0.69%不就是-0.0069么?
作者: hepeisheng 时间: 2020-8-4 19:43
是,但不直观。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |