Python v3.5를 사용하여 시작은 같지만 줄 끝이 다른 여러 텍스트 파일의 한 줄 삭제

ZPMMaker

1.GPS, 2.GPS 등과 같은 .GPS 파일로 가득 찬 폴더가 있습니다. 각 파일에는 다음 다섯 줄이 있습니다.

Trace #1 at position 0.004610
$GNGSA,A,3,02,06,12,19,24,25,,,,,,,2.2,1.0,2.0*21
$GNGSA,A,3,75,86,87,,,,,,,,,,2.2,1.0,2.0*2C
$GNVTG,39.0304,T,39.0304,M,0.029,N,0.054,K,D*32
$GNGGA,233701.00,3731.1972590,S,14544.3073733,E,4,09,1.0,514.675,M,,,0.49,3023*27

... 다음 다섯 줄에 걸쳐 다른 값을 가진 동일한 데이터 구조가 이어집니다.

Trace #6 at position 0.249839
$GNGSA,A,3,02,06,12,19,24,25,,,,,,,2.2,1.0,2.0*21
$GNGSA,A,3,75,86,87,,,,,,,,,,2.2,1.0,2.0*2C
$GNVTG,247.2375,T,247.2375,M,0.081,N,0.149,K,D*3D
$GNGGA,233706.00,3731.1971997,S,14544.3075178,E,4,09,1.0,514.689,M,,,0.71,3023*2F

(위의 예에서 $ GNGSA 라인 이후의 값이 다르지 않다는 것을 알고 있습니다. 이것은 단지 나쁜 예일뿐입니다. 실제 데이터 세트에서는 다양합니다!)

"$ GNGSA"및 "$ GNVTG"로 시작하는 줄을 제거해야합니다 (즉, 각 .GPS 파일 내 5 줄의 각 그룹에서 줄 2, 3, 4를 삭제해야합니다).

이 5 줄 패턴은 각 파일 전체에서 다양한 횟수로 계속됩니다 (일부 파일의 경우 두 개의 5 줄 그룹 만있을 수 있고 다른 파일에는 수백 개의 5 줄 그룹이있을 수 있음). 따라서 행 번호를 기준으로 이러한 행을 삭제하면 작동하지 않습니다 (행 번호가 가변적이기 때문에).

내가 겪고있는 문제 (위의 예에서 볼 수 있음)는 "$ GNGSA"또는 "$ GNVTG"뒤에 오는 텍스트가 다양하다는 것입니다.

저는 현재 Python을 배우고 있습니다 (저는 v3.5를 사용하고 있습니다). 그래서 이것이 제가 몇 가지 새로운 트릭을 배우는 데 좋은 프로젝트가 될 것이라고 생각했습니다.

내가 이미 시도한 것 :

지금까지 전체 폴더를 반복하는 코드를 만들었습니다.

import os

indir = '/Users/dhunter/GRID01/'  # input directory
for i in os.listdir(indir):  # for each "i" (iteration) within the indir variable directory...
    if i.endswith('.GPS'):  # if the filename of an iteration ends with .GPS, then...
        print(i + ' loaded')  # print the filename to CLI, simply for debugging purposes.
        with open(indir + i, 'r') as my_file:  # open the iteration file
            file_lines = my_file.readlines()    # uses the readlines method to create a list of all lines in the file.
            print(file_lines)  # this prints the entire contents of each file to CLI for debugging purposes.

위의 모든 것이 완벽하게 작동합니다.

도움이 필요한 사항 :

  1. 줄 자체를 감지하고 삭제 한 다음 파일을 동일한 위치에 저장하려면 어떻게해야합니까? 다른 파일 이름으로 저장할 필요가 없습니다.
  2. 일반적으로 ".GPS"로 끝나는 파일 이름은 ".gps"로 끝나는 경우도 있습니다 (유일한 차이점은 경우). 위의 코드는 대문자 파일에서만 작동합니다. 코드를 완전히 복제하고 endswith 인수를 변경하는 것 외에 어떻게 두 경우 모두에서 작동하도록 만들 수 있습니까?

결국 내 파일은 다음과 같아야합니다.

Trace #1 at position 0.004610
$GNGGA,233701.00,3731.1972590,S,14544.3073733,E,4,09,1.0,514.675,M,,,0.49,3023*27
Trace #6 at position 0.249839
$GNGGA,233706.00,3731.1971997,S,14544.3075178,E,4,09,1.0,514.689,M,,,0.71,3023*2F

어떤 제안이라도? 미리 감사드립니다. :)

ZPMMaker

좋습니다. Avinash Raj, tdelaney 및 Sampson Oliver의 제안에 따라 여기 Stack Overflow와 개인적으로 도움을 준 다른 친구는 현재 작동중인 솔루션입니다.

import os
indir = '/Users/dhunter/GRID01/'  # input directory
for i in os.listdir(indir):  # for each "i" (iteration) within the indir variable directory...
    if i.lower().endswith('.gps'):  # if the filename of an iteration ends with .GPS, then...
        if not i.lower().endswith('.gpsnew.gps'):  # if the filename does not end with .gpsnew.gps, then...
            print(i + ' loaded')  # print the filename to CLI.
            with open (indir + i, 'r') as my_file:
                for line in my_file:
                    if not line.startswith('$GNGSA'):
                        if not line.startswith('$GNVTG'):
                            with open(indir + i + 'new.gps', 'a') as outputfile:
                                outputfile.write(line)
                                outputfile.write('\r\n')

( "if not i.lower (). endswith ( '. gpsnew.gps') :"스크립트의 이전 사용에서 출력 파일을 사용하지 못하도록 if 문의 다른 레이어를 추가해야했습니다. 그러나이 줄은 나중에이 지침을 사용하는 사람이라면 누구나 쉽게 삭제할 수 있습니다.)

마지막 세 번째 줄의 열기 모드를 추가를 위해 "a"로 전환하여 매번 덮어 쓰지 않고 파일에 올바른 줄을 모두 저장합니다.

또한 마지막 줄에 추가하여 각 줄 끝에 줄 바꿈을 추가했습니다.

도움, 설명 및 제안에 감사드립니다. 이 솔루션이 미래에 누군가에게 유용하기를 바랍니다. :)

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

sed를 사용하여 텍스트 파일의 일부 및 다음 줄 삭제

분류에서Dev

타임 스탬프 bash를 사용하여 한 시간이 넘은 파일의 줄 삭제

분류에서Dev

Swift를 사용하여 텍스트 파일에서 한 줄 삭제

분류에서Dev

C #을 사용하여 PowerPoint 작업 창의 여러 줄 텍스트 상자에서 각 줄의 길이를 제한하는 방법은 무엇입니까?

분류에서Dev

Bash 스크립트 : sed의 변수를 사용하여 파일의 마지막 "x"줄을 제외한 모든 줄을 삭제합니다.

분류에서Dev

여러 텍스트 파일 데이터를 병합하지만 특정 줄을 다른 줄에 병합

분류에서Dev

사용자 입력 Python 3을 사용하여 텍스트 파일의 특정 줄을 삭제하는 방법

분류에서Dev

파이썬을 사용하여 시작과 끝으로 두 개의 식별자를 통해 거대한 텍스트 파일에서 줄 추출

분류에서Dev

Python을 사용하여 한 텍스트 파일에서 다른 텍스트 파일로 한 줄씩 복사

분류에서Dev

vim은 공백을 제외한 여러 줄의 시작 부분에 텍스트를 추가합니다.

분류에서Dev

append 메서드를 사용하여 같은 줄에 여러 텍스트를 인쇄하려고하지만 출력이 다릅니다.

분류에서Dev

일괄 : 파일 경로를 사용하여 텍스트 파일 끝에서 줄 바꿈 삭제

분류에서Dev

메모장 ++에서 다양한 여러 줄의 텍스트를 공통 시작 및 끝 문자열을 사용하여 한 줄의 코드로 결합하는 방법은 무엇입니까?

분류에서Dev

notepad ++ 또는 TextCrawler를 사용하여 여러 파일에서 특정 텍스트 앞의 모든 텍스트 줄과 다른 특정 텍스트 뒤의 모든 줄을 제거하는 방법은 무엇입니까?

분류에서Dev

sed / awk / etc를 사용하여 한 텍스트 파일의 홀수 줄을 다른 텍스트 파일의 해당 홀수 줄로 바꿉니다.

분류에서Dev

RegEx를 사용하여 다른 텍스트의 텍스트를 포함한 여러 줄과 공백을 추출하는 방법은 무엇입니까?

분류에서Dev

같은 메서드를 다른 시간에 호출하여 텍스트 파일에 여러 줄을 작성하는 방법은 무엇입니까?

분류에서Dev

파이썬을 사용하여 한 번에 여러 텍스트 파일의 마지막 줄을 목록으로 인쇄하십시오.

분류에서Dev

텍스트의 일부 복사를 자동화하고 여러 줄에 대해 같은 줄의 다른 곳에 붙여 넣습니다.

분류에서Dev

Powershell을 사용하여 한 줄의 텍스트를 그 위에있는 텍스트의 끝으로 이동

분류에서Dev

한 줄에 걸쳐 두 문자열 (포함) 사이의 텍스트를 여러 번 삭제 (macOS, BSD)

분류에서Dev

VBScript를 사용하여 특정 줄 뒤에 한 파일의 텍스트를 다른 파일에 추가하는 방법은 무엇입니까?

분류에서Dev

같은 줄 (여러 줄의 텍스트에서)에서 여러 일치를 위해 grep -o를 사용하여 줄 바꿈을 피하는 방법

분류에서Dev

여러 줄 차트에서 각 줄의 끝에 d3.js를 사용하여 작은 원과 끝점 값을 원합니다.

분류에서Dev

Python : 한 줄로 읽는 여러 줄 텍스트 파일

분류에서Dev

Python을 사용하여 텍스트 파일에서 특정 줄 수 삭제

분류에서Dev

batch / cmd를 사용하여 각 줄의 시작과 끝에 텍스트 추가

분류에서Dev

sed를 사용하여 다른 파일의 첫 번째 줄 앞에 텍스트 파일의 텍스트 입력

분류에서Dev

텍스트 줄임표를 사용하여 2 개의 텍스트를 같은 줄에 표시

Related 관련 기사

  1. 1

    sed를 사용하여 텍스트 파일의 일부 및 다음 줄 삭제

  2. 2

    타임 스탬프 bash를 사용하여 한 시간이 넘은 파일의 줄 삭제

  3. 3

    Swift를 사용하여 텍스트 파일에서 한 줄 삭제

  4. 4

    C #을 사용하여 PowerPoint 작업 창의 여러 줄 텍스트 상자에서 각 줄의 길이를 제한하는 방법은 무엇입니까?

  5. 5

    Bash 스크립트 : sed의 변수를 사용하여 파일의 마지막 "x"줄을 제외한 모든 줄을 삭제합니다.

  6. 6

    여러 텍스트 파일 데이터를 병합하지만 특정 줄을 다른 줄에 병합

  7. 7

    사용자 입력 Python 3을 사용하여 텍스트 파일의 특정 줄을 삭제하는 방법

  8. 8

    파이썬을 사용하여 시작과 끝으로 두 개의 식별자를 통해 거대한 텍스트 파일에서 줄 추출

  9. 9

    Python을 사용하여 한 텍스트 파일에서 다른 텍스트 파일로 한 줄씩 복사

  10. 10

    vim은 공백을 제외한 여러 줄의 시작 부분에 텍스트를 추가합니다.

  11. 11

    append 메서드를 사용하여 같은 줄에 여러 텍스트를 인쇄하려고하지만 출력이 다릅니다.

  12. 12

    일괄 : 파일 경로를 사용하여 텍스트 파일 끝에서 줄 바꿈 삭제

  13. 13

    메모장 ++에서 다양한 여러 줄의 텍스트를 공통 시작 및 끝 문자열을 사용하여 한 줄의 코드로 결합하는 방법은 무엇입니까?

  14. 14

    notepad ++ 또는 TextCrawler를 사용하여 여러 파일에서 특정 텍스트 앞의 모든 텍스트 줄과 다른 특정 텍스트 뒤의 모든 줄을 제거하는 방법은 무엇입니까?

  15. 15

    sed / awk / etc를 사용하여 한 텍스트 파일의 홀수 줄을 다른 텍스트 파일의 해당 홀수 줄로 바꿉니다.

  16. 16

    RegEx를 사용하여 다른 텍스트의 텍스트를 포함한 여러 줄과 공백을 추출하는 방법은 무엇입니까?

  17. 17

    같은 메서드를 다른 시간에 호출하여 텍스트 파일에 여러 줄을 작성하는 방법은 무엇입니까?

  18. 18

    파이썬을 사용하여 한 번에 여러 텍스트 파일의 마지막 줄을 목록으로 인쇄하십시오.

  19. 19

    텍스트의 일부 복사를 자동화하고 여러 줄에 대해 같은 줄의 다른 곳에 붙여 넣습니다.

  20. 20

    Powershell을 사용하여 한 줄의 텍스트를 그 위에있는 텍스트의 끝으로 이동

  21. 21

    한 줄에 걸쳐 두 문자열 (포함) 사이의 텍스트를 여러 번 삭제 (macOS, BSD)

  22. 22

    VBScript를 사용하여 특정 줄 뒤에 한 파일의 텍스트를 다른 파일에 추가하는 방법은 무엇입니까?

  23. 23

    같은 줄 (여러 줄의 텍스트에서)에서 여러 일치를 위해 grep -o를 사용하여 줄 바꿈을 피하는 방법

  24. 24

    여러 줄 차트에서 각 줄의 끝에 d3.js를 사용하여 작은 원과 끝점 값을 원합니다.

  25. 25

    Python : 한 줄로 읽는 여러 줄 텍스트 파일

  26. 26

    Python을 사용하여 텍스트 파일에서 특정 줄 수 삭제

  27. 27

    batch / cmd를 사용하여 각 줄의 시작과 끝에 텍스트 추가

  28. 28

    sed를 사용하여 다른 파일의 첫 번째 줄 앞에 텍스트 파일의 텍스트 입력

  29. 29

    텍스트 줄임표를 사용하여 2 개의 텍스트를 같은 줄에 표시

뜨겁다태그

보관