문제

특정 이름 지정/조직 구성표와 일치하는지 확인하고 싶은 파일(TV 에피소드, 상당히 임의적임)이 있습니다.

현재:유효한 파일 이름용, 에피소드 이름이 누락된 파일용, 유효한 경로용의 세 가지 정규식 배열이 있습니다.

그런 다음 각 유효한 파일 이름 정규식을 반복하여 일치하면 "유효한" dict에 추가하고, 그렇지 않으면 누락된 ep-name 정규식과 동일한 작업을 수행합니다. 일치하면 "잘못된" dict에 추가합니다. " 오류 코드(2:'누락된 에피소드 이름')가 있는 딕셔너리, 둘 다 일치하지 않으면 '잘못된 이름' 오류 코드와 함께 잘못된 것으로 추가됩니다.

현재 코드를 찾을 수 있습니다 여기

각 디렉토리에 폴더.jpg 파일이 있는지 확인하는 규칙을 추가하고 싶지만 이를 추가하면 현재 상태에서 코드가 훨씬 더 지저분해집니다.

이 시스템을 좀 더 확장 가능한 방식으로 작성하려면 어떻게 해야 합니까?

확인해야 할 규칙은 다음과 같습니다.

  • 파일 형식은 다음과 같습니다. Show Name - [01x23] - Episode Name.avi 또는 Show Name - [01xSpecial02] - Special Name.avi 또는 Show Name - [01xExtra01] - Extra Name.avi
  • 파일 이름이 형식인 경우 Show Name - [01x23].avi 출력의 '누락된 에피소드 이름' 섹션을 표시합니다.
  • 경로는 다음 형식이어야 합니다. Show Name/season 2/the_file.avi (시즌 2는 파일 이름의 올바른 시즌 번호여야 합니다)
  • Show Name/season 1/ 폴더에는 "folder.jpg"가 포함되어 있어야 합니다.

.어떤 아이디어라도 있나요?TV 에피소드를 확인하면서 이 개념/코드를 여러 가지에 적용할 수 있을 것 같아요..

내가 가진 유일한 생각은 다음 형식의 dict 목록이었습니다.

checker = [
{
    'name':'valid files',
    'type':'file',
    'function':check_valid(), # runs check_valid() on all files
    'status':0 # if it returns True, this is the status the file gets
}
도움이 되었습니까?

해결책

각 디렉토리에 Folder.jpg 파일이 있는지 확인하는 규칙을 추가하고 싶지만이를 추가하면 현재 상태에서 코드가 실질적으로 더 지저분 해집니다.

나쁘지 않은 것 같습니다.실제로 현재 코드는 이를 매우 훌륭하게 수행하며 Sven도 이를 수행하는 좋은 방법을 언급했습니다.

  1. 모든 파일 목록 가져오기
  2. "필수" 파일 확인

필요한 파일 목록을 사전에 추가하면 됩니다.

checker = {
  ...
  'required': ['file', 'list', 'for_required']
}

이를 수행하는 더 나은/확장 가능한 방법이 있습니까?나는 정확히 확신하지 못한다.나는 "여러" 정규식을 삭제하고 구분 기호 사용에 대한 Sven의 아이디어를 기반으로 구축하는 방법만 실제로 생각할 수 있었습니다.그래서 내 전략은 다음과 같이 사전을 정의하는 것입니다. (그리고 Python 구문을 모르고 검색하기가 좀 게으르지만 이해가 될 것입니다. 죄송합니다./regex/는 정규식의 약어입니다.)

check_dict = {
  'delim'    : /\-/,
  'parts'    : [ 'Show Name', 'Episode Name', 'Episode Number' ],
  'patterns' : [/valid name/, /valid episode name/, /valid number/ ],
  'required' : ['list', 'of', 'files'],
  'ignored'  : ['.*', 'hidden.txt'],
  'start_dir': '/path/to/dir/to/test/'
}
  1. 구분 기호를 기준으로 파일 이름을 분할합니다.
  2. 각 부품을 확인해보세요.

순서가 지정된 목록이므로 어떤 부분이 누락되었는지 확인할 수 있으며 섹션이 어떤 패턴과도 일치하지 않으면 형식이 잘못된 것입니다.여기서는 parts 그리고 patterns 1:1 비율을 가지고 있습니다.사전 대신 두 개의 배열이 순서를 적용합니다.

무시된 파일과 필수 파일을 나열할 수 있습니다.그만큼 . 그리고 .. 파일은 자동으로 무시되어야 합니다.사용자는 쉘 확장이 가능한 "globs"를 입력할 수 있어야 합니다.여기서 생각하고 있어요 svn:ignore 속성이지만 파일 나열에는 글로빙이 자연스럽습니다.

여기 start_dir 기본값은 현재 디렉터리이지만 단일 파일로 여러 디렉터리에 대한 자동화된 테스트를 실행하려는 경우 유용할 것입니다.

여기서 실제 느슨한 끝은 경로 템플릿과 "유효한 파일"에 필요한 경로가 같은 줄입니다.하나의 큰 정규식을 작성하고 그로부터 그룹을 가져오지 않고는 정말 확실한 아이디어를 생각해 낼 수 없었습니다...템플릿을 구축합니다.TextMate 언어 문법을 작성하는 것과 매우 비슷했습니다.그러나 이는 사용 편의성에서 벗어나기 시작합니다.진짜 문제는 경로 템플릿이 다음으로 구성되지 않았다는 것입니다. parts, 이는 의미가 있지만 복잡성을 추가합니다.

이 전략이 당신이 생각했던 것과 일치합니까?

다른 팁

어쩌면 다음과 같이 기본값을 설정하는 접근 방식을 취해야 할 수도 있습니다."파일 이름이 정확합니다." 그리고 거기서부터 그 진술을 반증하기 위해 작업합니다.

다음과 같은 파일 이름만 허용한다는 사실이 있습니다.'쇼 이름', '시즌 번호 x 에피소드 번호' 및 '에피소드 이름', 이러한 항목은 "-"(대시)로 구분되어야 하므로 파일 이름이 정확하려면 이 중 2개가 있어야 한다는 것을 확실히 알고 계실 것입니다. .
그것이 체크아웃되면 코드를 사용하여 쇼 이름이 상위 폴더에 표시된 쇼 이름과 일치하는지(대소문자를 구분하지 않는 것으로 가정함), 시즌 번호가 상위 폴더 숫자 값(추가 0이 있든 없든)과 일치하는지 확인할 수 있습니다. 앞에 붙음).

그러나 정확한 양의 대시가 표시되지 않으면 문제가 있음을 즉시 알고 나머지 테스트 전에 중지합니다.

별도로 파일이 있는지 확인할 수 있습니다 folder.jpg 존재하고 필요한 조치를 취합니다. 또는 먼저 해당 폴더의 나머지 파일에서 해당 파일을 필터링하세요.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top