如何从Ruby中的一个非utf8文本文件中提取数字并将它们放入另一个文件中?

2024-09-27 19:18:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一些数据由终端记录并保存到一个typescript文件中。我知道如果需要的话我可以把它改成.txt。问题似乎是,尽管在请求文件编码时返回UTF-8,但我得到的错误似乎暗示编码是另一回事。例如,我无法将内容复制并粘贴到Word或其他文本编辑器中。你知道吗

不管怎样,我没有幸用标准的.gsub!.tr方法从这个文件中删除非数字字符。你知道吗

输入如下所示:

_4ÑZŸs_4ÑZâ7o[?1034h
_4ÑZ8obash-3.2$ e4ÑZ”C
i[A e4ÑZõD
oscript -re4ÑZˇ?
i[Ae4ÑZ∑@
opython go.pyf4ÑZÌ
i
f4ÑZ£Ì
o
f4ÑZÊÚoattn 0
f4ÑZ,Ûoattn 0
attn 0
Hf4ÑZuÛoattn 0
attn 0
attn 0
attn 0
attn 0
attn 0
attn 0

其中“0”可以是0到128之间的任意数字。你知道吗

我只想要“attn”后面的数字,而不是attn。你知道吗

这是我目前的代码:

File.open("input.txt").each do |line|
  number = line.gsub('[0-9]+', ' ')
  File.open("output.txt", "w+") { |f| f.write(number)  }
end

根据我所做的任何小改动,我要么得到一个枚举器,要么只得到输入文件的最后一个数字。你知道吗

从没想过做这么基本的事会这么难。你知道吗

加分:让程序输出这些数字,然后将它们插入excel工作表的第1列或第3列(直到我在终端终止程序为止),最好的方法是什么?你知道吗

生成输入文件的Python程序只是从一个串行对象中获取值并将它们输出到终端,终端生成所讨论的文本文件。我只是徒劳地尝试将它们从这个文本文件手动移动到Excel(我现在愚蠢地尝试用一个简单的Ruby脚本来自动化这个任务)。你知道吗

Python或Ruby中的一个脚本就足够了,只要它接受一个.txt文件作为输入(因为我正在处理已经生成的数据)。你知道吗

我有Mac,所以我用网页,如果这有区别的话。你知道吗

Here是有问题的原始文件。编辑:出于安全原因删除了文件。你知道吗

TL;博士

  1. 如何在一个新的行上只打印typescript(似乎不是UTF-8)文件中的数字(每个数字有1-3位数长)?

  2. 如何使整个过程自动化,并让Python程序无限期地(在无限while True:循环中)将值插入到.numbers(Excel for Mac)文件中?

谢谢你!你知道吗


Tags: 文件数据方法程序txt终端编码数字
3条回答

谢谢你的回答。最终对我有效的解决方案是获取二进制文件并通过以下脚本运行它:

strings input.txt | grep -o "\d.*" | uniq > output.txt

如前所述,它使用Unix命令strings仅从二进制文件生成字符串,然后运行grep命令仅将每个数字的唯一实例(未排序,因为其基于时间的数据)输出到输出文件。然后我用Excel做进一步的过滤。你知道吗

正则表达式:^{}(?<=^attn\s)\d+

详情:

  • (?<=)正面回顾
  • \s匹配任何空格字符(等于[\r\n\t\f\v ]
  • (?:)非捕获组
  • []匹配列表中的单个字符
  • {n,m}nm次之间匹配
  • |

Python代码

text = open(r'C:\text.txt').read()
matches = re.findall(r'(?<=^attn\s)(?:[0-9]{1,2}|1[01][0-9]|12[0-8])$', text, re.M)

输出:

['11', '0', '99', '120', '0']

Code demo

你真的应该把这个问题分成两个独立的问题。以下是对第一个问题的回答;一些Ruby代码可以满足您的需要:

numbers = File.readlines('input.txt').grep(/^attr \d+/).map do |line|
  line.split('attr ').last.chomp.to_i
end

File.write('output.txt', numbers.join("\n"))

相关问题 更多 >

    热门问题