일반 설명 : 첫째로 : 나는 API에서 데이터를 가져 오는 수백 개의 모듈을 만들어야합니다. 모듈은 대부분 비슷한 구조를 가지지 만 일부 요소는 다양합니다 (예 : 메소드).문자열의 클래스 끝 찾기
둘째 : 많은 모듈을 나중에 편집해야합니다 (예 : 모듈의 메소드 변경).
그 때문에 는 I는 프로그램 작성 :
- 는 (기록 모드) 모듈을 열어
- 검색 (예 방법) 객체를 그것이 시작되는하고 끝나는 위치를 결정한다.
- 그런 다음 개체를 다른 것으로 바꿉니다.
코드 예제
# I want to edit module_1 to module_100 and change their cook_method to bake_method.
# Below is the code for only one of the 100 modules.
with open('module_1.py', 'w+') as file:
old = file.read()
# method_loc is a function that returns a dict,
# containing start and end of the method i wanted to edit.
location_dct = method_loc(name='cook_method', string=old)
# change cook_method to bake_method
new = old[:location_dct['end']] + bake_method_as_string + old[location_dct['start']:]
file.write(new)
문제 : 클래스가 매우 어렵다 종료 정확한 위치를 감지 . 문자열 메서드를 사용하여 메서드를 만들었지 만 너무 복잡하고 엉성함을 느낍니다. 나는 위의 것을 더 쉽게 만들 수있는 regular expressions을 수색하고 발견했다.
또한 pyclbr은 클래스가 끝나는 라인을 줄 수 있다면 좋지만 실제로는 그렇지 않습니다.
질문
- 클래스 (또는 메소드 또는 함수 또는 딕셔너리가) 문자열로 열 모듈 내부에 끝나는 찾을 수있는 더 나은 방법이 있나요?
- 일부 라이브러리에서 위의 기능을 사용할 수 있습니까?
- 위의 작업을 수행하는 다른 방법이 있습니까?
일반 텍스트가 아닌 구문 트리를 통해 코드를 수정하는 것이 좋습니다 (예 : ['ast'] (https://docs.python.org/2/library/ast.html)).) 또는 ['rope'] (http://rope.sourceforge.net/)/['traad'] (https://github.com/abingham/traad). – bereal
나는 다른 방식으로 문제에 접근 할 것이다. 이러한 모듈이 데이터를 집계하기 위해 생성 된 경우 데이터베이스 (특정 필드 포함)에 저장 한 다음 DB에서 직접 데이터를 쿼리하는 것이 좋습니다. – user3378649
@bereal 구문 트리가 무엇인지 전혀 알지 못합니다. 일반 텍스트의 문제점은 무엇입니까? 일반 텍스트로 주제에 대한 작업을 계속하는 것과 비교하여 보안 목표 명세서에 대해 배우는 것이 가치가 있습니까? –