我有一个 .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
@a
END
@a
join
andthen
$_
"[$_]"
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]
请注意,这假设文件中的所有内容都是索引及其值。没有标题,输出中没有不需要的内容。如果情况并非如此,请使用包含这些内容的输入示例更新您的问题。