내 폴더에는 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 스크립트를 업데이트할 예정입니다.