특정 순서로 파일 처리

특정 순서로 파일 처리

내 폴더에는 40,000개의 이미지가 있습니다. 파일 이름은 다음 패턴을 따릅니다.

1558058263_18ea873ddcf8c65e.jpg
1558408930_63c29ce4462ec194.jpg 
1558062887_18ea873ddcf8c65e.jpg

이 파일 이름에서 첫 번째 부분은 타임스탬프이고 두 번째 부분은 이미지를 생성한 컴퓨터 ID입니다.

타임스탬프만을 기준으로 각 파일을 순차적으로 처리하고 싶습니다. 처리를 위해 파일을 가져오는 방법. 저는 python3을 사용하여 파일을 선택하고 있습니다. 현재 코드는 다음과 같습니다.

 for root, dirs, files in os.walk(path):
                for name in files:
                        img=fr.load_image_file('/home/ubuntu/faces/' + name)

답변1

sort()나에게는 or 함수를 사용할 수 있는 것 같습니다 sorted()(스택 오버플로):

# ...
for root, dirs, files in os.walk(path):
   files.sort()
   for name in files:
      print(name)

또는

# ...
for root, dirs, files in os.walk(path):
   for name in sorted(files):
      print(name)

답변2

람다를 통해 정렬을 시도해 볼 수 있습니다(테스트되지 않음).

for root, dirs, files in os.walk(path):
    for name in sorted(files,  key=lambda x: int(re.search(r'\d+', x).group())):
        img=fr.load_image_file('/home/ubuntu/faces/' + name)

답변3

sort명령을 사용하면 원하는 결과를 얻을 수 있습니다.

ls | sort -n -t '_' -k1

-n기본 사전 순서 대신 숫자로 정렬합니다. 필드 구분 기호로
-t '_'지정됩니다 . 첫 번째 필드를 정렬합니다. _
-k1

답변4

테스트를 거쳤으며 훌륭하게 작동합니다.

find . -type f -iname "*.jpg" 2>/dev/null| sed "s/\.\///g"| awk -F "_" '{print $1,$2}'| sort -k1| awk 'OFS="_" {print $1,$2}'

곧 Python 스크립트를 업데이트할 예정입니다.

관련 정보