Удалить строки текстового файла, если они ссылаются на несуществующий файл - PullRequest
0 голосов
/ 26 июня 2018

У меня есть текстовый файл (images1.txt) со списками имен .jpg, и у меня есть папка (Bones) с .jpg изображениями.Все имена изображений составляют ровно 42 символа (включая расширение файла), и каждое находится на отдельной строке, содержащей имя и некоторую информацию об изображении.Например:

OO75768249870G_2018051_4A284DQ0-011628.jpg,1A4502432KJL459265,emergency
OO75768249870G_2018051_4A284DQ0-011629.jpg,1A451743245122,appointment

, где все, что после .jpg - это мои личные заметки о фотографиях.Bones содержит многие из 4000+ изображений, названных в images1, но не все.Используя командную строку или python, как мне удалить строки из images1, которые соответствуют изображениям, которых нет в моей папке Bones?

Спасибо!

Ответы [ 3 ]

0 голосов
/ 26 июня 2018

Этот код будет читать строки из image1.txt и создавать файл image2.txt со строками, в которых находится файл в каталоге bones.

@ECHO OFF
IF EXIST image2.txt (DEL image2.txt)
FOR /F "tokens=1,* delims=," %%f IN ('TYPE "image1.txt"') DO (
    IF EXIST "bones\%%~f" (ECHO %%f,%%g >>"image2.txt")
)
EXIT /B
0 голосов
/ 26 июня 2018

Я думаю, что самый простой способ - использовать команду findstr :

rem /* Search for lines in file `images1.txt` in a case-insensitive manner that literally begin
rem    with a file name found in the directory `Bones` which in turn matches the naming pattern;
rem    then write all matching lines into a temporary file: */
dir /B /A:-D "Bones\??????????????_???????_????????-??????.jpg" | findstr /LIBG:/ "images1.txt" > "images1.tmp"
rem // Overwrite original `images1.txt` file by the temporary file:
move /Y "images1.tmp" "images1.txt" > nul
0 голосов
/ 26 июня 2018

В python:

import os

LEN_OF_FILENAME = 42

with open('images1.txt', 'r') as image_file:
    with open('filtered_images1.txt', 'w') as filtered_image_file:
        for line in image_file:
            image_name = line[:LEN_OF_FILENAME]
            path_to_image = os.path.join('Bones', image_name)
            if os.path.exists(path_to_image):
                filtered_image_file.write(line)

Предполагая, что images1.txt и Bones находятся в одной папке, если вы запустите вышеупомянутый скрипт Python в этой папке, вы получите filtered_images1.txt.Он будет содержать только строки с соответствующим изображением в Bones.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...