Как записать сценарий удара для выполнения той же команды для всех файлов в каталоге

Я хочу выполнить эту команду для всех файлов в каталоге.

tesseract /home/kong/Documents/input/248.jpg stdout --psm 1 --oem 1 --dpi 300 tsv >/home/kong/Documents/input/ocr_output/input/248.tsv

Ввод и вывод должен иметь то же число как 248.jpg и 248.tsv. Я пытался писать сценарий Python, и он вызывает проблемы разделителя.

Кто-то может помочь мне с этим? Я - новичок удара.

Это - сценарий Python, который я записал

comm = shlex.split(command)

out_dir = '/home/kong/Documents/input/ocr_output/input'


for file in tqdm(files):
    base_name = os.path.basename(file)
    number = base_name.split('.')[0]
    out_path = '>' + out_dir + '/' + number + '.tsv'
    comm[1] = file
    comm[-1] = out_path
#     tsv = number + '.tsv'
    with open(out_path, 'w') as f:
        subprocess.run(comm, shell=True, stdout=f)
2
задан 31 July 2019 в 19:22

2 ответа

Попробуйте это:

source_dir=/your/source/dir
output_dir=/your/output/dir

cd "$source_dir" || exit

for file in *.jpg; do
  tesseract "$file" stdout --psm 1 --oem 1 --dpi 300 tsv > "$output_dir/${file%.jpg}.tsv"
done
4
ответ дан 2 December 2019 в 02:11

Так же, как альтернатива можно использовать этот сценарий с Python 3.5 или выше.

import os
import subprocess as sp

# input directory
in_dir = '/home/kong/Documents/input/'
# output directory
out_dir = '/home/kong/Documents/input/ocr_output/input/'

# list of files in input directory
files = [f for f in os.listdir(in_dir)
         if os.path.isfile(os.path.join(in_dir, f))]

for file in files:
    # input file
    in_file = os.path.join(in_dir, file)

    basename = os.path.splitext(file)[0]
    # output file
    out_file = os.path.join(out_dir, basename + '.tsv')

    # run command and save its output to out with utf-8 encoding
    out = sp.run(['tesseract', in_file, 'stdout', '--psm', '1',
                  '--oem', '1', '--dpi', '300', 'tsv'],
                 stdout=sp.PIPE).stdout.decode('utf-8')

    # save command output to file
    with open(out_file, 'w') as f:
        f.write(out)
0
ответ дан 2 December 2019 в 02:11

Другие вопросы по тегам:

Похожие вопросы: