정규식 검색 및 바꾸기 [닫기]

정규식 검색 및 바꾸기 [닫기]

숫자 모음인 .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설정해야 합니다 . 입력 줄은 공백(약어)으로 분할되고 두 번째 열은 편집됩니다. 블록에는 괄호가 필요하지 않습니다. 필요에 따라 배열 요소를 편집하고, 테마를 다시 로드하여 최종 출력 호출을 단순화하고, 왼쪽 및 오른쪽 대괄호를 사용합니다(끝에 줄 바꿈 추가).myour$_\s+.split$_.split[1]push@aEND@ajoinandthen$_"[$_]"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]

여기서는 파일의 모든 항목이 인덱스와 해당 값이라고 가정합니다. 헤더가 없으면 출력에 원하지 않는 내용이 없습니다. 그렇지 않은 경우 이를 포함하는 입력 예시로 질문을 업데이트하세요.

관련 정보