파일 및 이름 (예 : "John")을 묻는 Python 스크립트를 작성하고 있습니다.문자열 찾기 및 다음 몇 줄 바꾸기
파일은 다음과 같은 라인의 전체 무리가 포함
...
Name=John
Age=30
Pay=1000
Married=1
Name=Bob
Age=25
Pay=500
Married=0
Name=John
Age=56
Pay=3000
Married=1
...
나는,이 파일을 열 이름의 사용자를 요청하고, 그 이름과 일치하는 모든 항목에 대해 지불 값을 대체합니다. 예를 들어, 사용자가 "John"을 입력하면 모든 "John"이 5000이되도록 지불을 변경하려고합니다. 다른 이름의 Pay 값은 변경되지 않습니다.
는 지금까지 내가 좀 더 쉽게 일 수 있도록 하나의 긴 문자열로 파일과 연결된 모든 것을 연 : 처음에는
for line in file:
file_string += line
, 내가 문자열의 어떤 종류에 대해 생각을 대체하지만 didn를이 "John"을 검색 할 것이므로 "pan"을 제외하고 "John"을 바꾸고 싶지는 않지만 두 줄 아래의 Pay 값을 대신 사용하십시오.
대신 정규 표현식을 사용하기 시작했으며 이와 비슷한 것을 만들었습니다.
# non-greedy matching
re.findall("Name=(.*?)\nAge=(.*?)\nPay=(.*?)\n", file_string, re.S)
좋아요, 그래서 그 그룹의 3 튜플 목록을 뱉어 내고 모든 것이 잘된 것처럼 보입니다. 이제 실제 대체 할 ...
나는 ... 나는 그룹의 이름을 설정하고 나중에 그룹화 것을 사용할 수 있습니다 여기에 StackOverflow에 또 다른 질문에 읽기 :re.sub(r'Name=(.*?)\nAge=(.*?)\nPay=', r'5000', file_string, re.S)
나는 시도 모든 이름을 5000으로 바꾸고 작동하는지 확인하지만 그렇지 않습니다. 만약 그렇다면 아마 첫 번째 그룹이 사용자가 입력 한 이름과 일치하는지 확인해야 할 것입니다.
또 다른 문제는 re.sub
이 가장 왼쪽 항목 만 대체한다는 Python 문서를 읽었습니다. 나는 모든 사건을 대체하고 싶다. 어떻게해야합니까?
이제 누군가가 나에게 도움이된다면 그렇게 할 수있는 일이 조금 손실됩니다.
당신은 그냥 라인으로 파일 라인을 통해 이동하고 즉시 당신은 이름이 "존"에 도달로, 두 줄 아래로 지불 값을 변경 한 다음 읽기 나머지를 유지할 수 있습니다 윤곽. –