숫자 모음인 .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
라인별 비자동 인쇄 모드에서 사용됩니다(Raku에는 Perl보다 명령줄 플래그가 적습니다). 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
나는 이것을 사용하여 두 번째 필드를 인쇄한 다음 시작 부분에 a를 추가하고 후행 a를 a로 바꾸는 awk
간단한 대체를 수행합니다 .sed
[
,
]\n
$ awk '{ printf "%s, ",$2}' file | sed 's/^/[/; s/, $/]\n/'
[2, 999, 105, 78, 45, 6666]
여기서는 파일의 모든 항목이 인덱스와 해당 값이라고 가정합니다. 헤더가 없으면 출력에 원하지 않는 내용이 없습니다. 그렇지 않은 경우 이를 포함하는 입력 예시로 질문을 업데이트하세요.