搜索和替换正则表达式

搜索和替换正则表达式

我有一个 .txt 文件,它是数字的集合。它看起来像这样:

[...]
6 2
7 999
8 105
9 78
10 45
11 6666
[...]

最多 4 位索引。

现在我想将数字作为列表导入到 python 中。这意味着我需要一个列表

[2, 999, 105, 78, ...]

所以我想去掉索引和索引后面的空格,并在每个条目后设置一个逗号。我对这些不熟悉,但我知道它应该与正则表达式一起使用。你能帮我吗?

答案1

Python按要求使用:

file_path = 'file.txt'

with open(file_path, 'r') as file:
    c2 = [int(line.split()[1]) for line in file]

print(c2)

答案2

由于所有行都包含两个数字,因此无需使用正则表达式。您只需使用awk命令即可。

一班轮:

awk 'NR==2 {SEP=", "} {RES=RES SEP $2} END {printf "[%s]\n", RES}' file.txt

多行以获得更好的可读性:

awk '
  NR == 2 { SEP=", " } 
  { RES = RES SEP $2 } 
  END { printf "[%s]\n", RES }
' file.txt

结果:

[2, 999, 105, 78, 45, 6666]

答案3

使用珀尔

~$ perl -ane 'push @a, $F[1]; END { print "[", join(", ", @a), "]\n" };'  file
[2, 999, 105, 78, 45, 6666]

上面,Perl 用于-ane逐行、自动分割、非自动打印模式。无需BEGIN阻止。数组@a会自动激活,并且可以将元素push添加到它上面——在本例中,是$F[1]按空格分割后的第二列。 (仅供参考,push @a, split /\s+/, $F[1]也可以,但split /\s+/这里是多余的)。在该END块中,@a数组元素join根据要求进行编辑,并print使用左方括号和右方括号进行调用。


使用(以前称为 Perl_6)

~$ raku -ne 'my @a.push: .split(/\s+/).[1]; END @a.join(", ") andthen put "[$_]";'   file
[2, 999, 105, 78, 45, 6666]

上面,Raku 用于-ne逐行非自动打印模式(与 Perl 相比,Raku 中的命令行标志更少)。不需要任何BEGIN块,但是@a必须使用my(或our) 调用数组来设置范围。输入行在空格(的缩写)$_上分割,第二列被编辑到。在块中不需要括号:按照要求编辑数组元素,重新加载主题,以简化最终输出调用,使用左方括号和右方括号(在末尾添加换行符)。\s+.split$_.split[1]push@aEND@ajoinandthen$_"[$_]"put


输入示例:

6 2
7 999
8 105
9 78
10 45
11 6666

答案4

我将用来awk打印第二个字段,然后进行简单的替换以在开头sed添加 a并用 a替换尾随:[,]\n

$ awk '{ printf "%s, ",$2}' file | sed 's/^/[/; s/, $/]\n/'
[2, 999, 105, 78, 45, 6666]

请注意,这假设文件中的所有内容都是索引及其值。没有标题,输出中没有不需要的内容。如果情况并非如此,请使用包含这些内容的输入示例更新您的问题。

相关内容