- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想从文本中删除重复的行,例如:
1.aabba
2.abaab
3.aabba
4.aabba
运行后:
1.aabba
2.abaab
到目前为止尝试过:
lines = File.readlines("input.txt")
lines = File.read('/path/to/file')
lines.split("\n").uniq.join("\n")
最佳答案
让我们构建一个文件。
fname = 't'
IO.write fname, <<~END
dog
cat
dog
pig
cat
END
#=> 20
参见IO::write 。首先,我们假设您只是想将唯一的行读入数组中。
如果像这里一样,文件不是太大,你可以这样写:
arr = IO.readlines(fname, chomp: true).uniq
#=> ["dog", "cat", "pig"]
参见IO::readlines 。 chomp: true
删除每行末尾的换行符。
如果您希望将该数组写入另一个文件:
fname_out = 'tt'
IO.write(fname_out, arr.join("\n") << "\n")
#=> 12
或
File.open(fname_out, 'w') do |f|
arr.each { |line| f.puts line }
end
如果您想覆盖fname
,请写入新文件,删除现有文件,然后将新文件重命名为fname
。
如果文件太大,无法保存在内存中并且有许多重复行,您也许可以执行以下操作。
require 'set'
st = IO.foreach(fname, chomp: true).with_object(Set.new) do |line, st|
st.add(line)
end
#=> #<Set: {"dog", "cat", "pig"}>
参见IO::foreach .
如果你想简单地将这个集合的内容写入文件,你可以执行:
File.open(fname_out, 'w') do |f|
st.each { |s| f.puts(s) }
end
如果您需要将集合转换为数组:
st.to_a
#=> ["dog", "cat", "pig"]
这假设您有足够的内存来容纳 st
和 st.to_a
。如果没有,你可以写:
st.size.times.with_object([]) do |_,a|
s = st.first
a << s
st.delete(s)
end
#=> ["dog", "cat", "pig"]
如果您没有足够的内存来保存 st
,您将需要将文件(逐行)读入数据库,然后使用数据库操作。
如果您希望写入跳过重复项的文件,并且该文件非常大,您可以执行以下操作,尽管包含一个或多个重复项的风险极小(请参阅注释)。
require 'set'
line_map = IO.foreach(fname, chomp: true).with_object({}) do |line,h|
hsh = line.hash
h[hsh] = $. unless h.key?(hsh)
end
#=> {3393575068349183629=>1, -4358860729541388342=>2,
# -176447925574512206=>4}
$.是刚刚读取的行的编号(以 1 为底)。请参阅String#hash 。由于该方法返回的不同值的数量是有限的,而可能的字符串的数量是无限的,因此两个不同的字符串有可能具有相同的哈希值。
然后(假设line_map
不为空):
lines_to_keep = line_map.values
File.open(fname_out, 'w') do |fout|
IO.foreach(fname, chomp: true) do |line|
if lines_to_keep.first == $.
fout.puts(line)
lines_to_keep.shift
end
end
end
让我们看看我们写了什么:
puts File.read(fname_out)
dog
cat
pig
参见File::open .
顺便说一下,对于IO
类方法m
(包括read
、write
、readlines
和 foreach
),你可能会看到 IO.m...
写成 File.m...
。这是允许的,因为 File
是 IO
的子类,因此继承了后者的方法。这不适用于我对 File::open
的使用,如 IO::Open是一种不同的方法。
关于 ruby : How to remove duplicate lines from a document text?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59902863/
当前问题陈述的输入是 - 输入.txt #START_OF_TEST_CASES #DATA key1:VA1 key2:VA2 key3:VA3 key4:VA4 key5:VA5 #DEND #E
编辑:添加了 PDO 调用。 这是实际的错误: Notice: Object of class PDOStatement could not be converted to int in Unknow
“git diff --stat”和“git log --stat”显示如下输出: $ git diff -C --stat HEAD c9af3e6136e8aec1f79368c2a6164e56
我有一个具有以下格式的输入文件:安大略省:布兰普顿:北纬 43° 41':西经 79° 45'安大略省:多伦多:北纬 43° 39':西经 79° 23'魁北克省:蒙特利尔:北纬 45° 30':西经
空白行仅包含\n或\r\n或\r。 tempfile = open(file,"r") for id,line in enumerate(tempfile): if(line != "\n"
我尝试使用 BABYLON.js 开发棋盘游戏我有一个板子和一个 ArcRotateCamera。 我的灯是 HemisphericLight 当我在板上画线时,我希望这些线具有相同的外观。现在,当我
我尝试使用 BABYLON.js 开发棋盘游戏我有一个板子和一个 ArcRotateCamera。 我的灯是 HemisphericLight 当我在板上画线时,我希望这些线具有相同的外观。现在,当我
有一个while read循环: while read line; do grep "^$line" file1 done < target 我应该使用 "^$line" 来获得正确答案。我想
我有一个我无法解决的 numpy 问题。我有填充 0 和 1 的 3D 数组 (x,y,z)。例如,z 轴上的一个切片: array([[1, 0, 1, 0, 1, 1, 0, 0],
作为临时方法,我使用 .txt 文件来存储程序的某些变量。写入与 fs.appendFile 完美配合,但考虑到它的大小,使用 fs.readFile 读取不合适 - 我想得到某一行 来自文件,以及
我试图找到一种通过R studio进行调试的方法,但是我发现的所有解决方案都无法真正起作用。 1.)CTRL + enter:有效,但不会通过循环的每次迭代,而只能执行一次。 2.)添加“browse
在我的应用程序中,我的 EditText 左侧有行号 - 到目前为止一切都很好,行号与 EditText 的行完全对齐。 问题是,如果用户更改 EditText 的文本大小,则行号无法正确对齐。所以我
通过使用 + 的参数调用它,我可以使 vim 将光标定位在文件的最后一行。 : vi + myfile # "+" = go to last line of file 我怎样才能做到
我已经在文件中写入了这样的数据(某种) {:a 25 :b 28} {:a 2 :b 50} ... 我想要这些 map 的惰性序列。 大约有 4000 万行。我也可以写 10000 的 block
我在文本区域中发现了一个奇怪的错误(?)... 比如说,有一个 使用多行文本(用户粘贴的文本或预设文本无关紧要,两者都经过测试)。 我想从 中获取文本并替换 \n与其他东西......结果是,.re
我需要一个新行,这样我就可以在 PFD 中看到一个格式,我尝试添加一个页面宽度但它没有用,我用另一个东西/n 也没有用。这是我的代码。我可以手动添加格式,因为我需要显示从数据库中获取的信息,并且我在一
我正在尝试编写一个 Java 程序,它将大量 GPS 坐标捕捉到线形文件(道路网络),并且不仅返回新坐标,还返回捕捉到的线段的唯一标识符。该标识符是否是 FID、其他语言中使用的“索引”(即,其中 1
你好,我正在努力处理 JavaScript/NodeJS 中的数组。 基本上,这是我的代码: let arr = new Array(); arr = { "Username" : var1,
我正在学习 matplotlib 的基本教程,我正在处理的示例代码是: import numpy as np import matplotlib.pylab as plt x=[1,2,3,4] y=
所以,假设我有一个包含 20 行的文本文件,每行都有不同的文本。我希望能够有一个包含第一行的字符串,但是当我执行 NextLine(); 时我希望它成为下一行。我试过了,但它似乎不起作用: strin
我是一名优秀的程序员,十分优秀!