Сохраните несколько целей URL к текстовым файлам

Если Вы смотрите на страницы Википедии для PPM и PAM, он говорит, что магические числа для PPM следующие:

выборка от PPM страница Википедии

Каждый файл запускается с двухбайтового магического числа (в ASCII), который объясняет тип файла, который это (PBM, PGM и PPM) и его кодирование (ASCII или двоичный файл). Магическое число является капиталом P сопровождаемый единственным числом цифры.

Magic Number    Type           Encoding
P1           Portable bitmap    ASCII
P2           Portable graymap   ASCII
P3           Portable pixmap    ASCII
P4           Portable bitmap    Binary
P5           Portable graymap   Binary
P6           Portable pixmap    Binary

Принимая во внимание, что с форматом PAM это - магическое число, P7. Также это были следующие различия от более старых форматов (PPM, PNM, PGM, PBM):

выборка от PAM страница Википедии

Заголовок для формата файла PAM начинается с P7, и (в отличие от этого, в других форматах) концы в явном завершении: ENDHDR.

Нет никакой плоскости (человекочитаема, основана на ASCII) версия PAM. Файлы PAM являются всегда двоичными, и пытается использовать переключатель - плоскость с программами Netpbm, которые приводят к выходным результатам PAM в сообщении об ошибке.

Для черно-белой версии PAM (глубина 1, тип "кортеж" BLACKANDWHITE), соответствуя PBM, PAM использует один байт на пиксель вместо использования PBM одного бита на пиксель (упаковка восьми пикселей в одном байте). Кроме того, значение 1 в таком изображении PAM поддерживает белый (“свет на”), в противоположность черному цвету в PBM (“чернила на”).

Пример

Если я преобразовываю файл PNG в использование файла PPM mogrify Я получаю следующее:

преобразуйте blah.png в blah.ppm:

mogrify -format ppm blah.png

информация о файле:

$ ll |grep bla
-rw-rw-r--   1 saml saml      11870 May 29 21:36 blah.png
-rw-rw-r--   1 saml saml     530613 May 29 21:36 blah.ppm

определите информацию:

$ identify blah.png blah.ppm 
blah.png PNG 926x191 926x191+0+0 8-bit DirectClass 11.9KB 0.000u 0:00.000
blah.ppm[1] PNM 926x191 926x191+0+0 8-bit DirectClass 531KB 0.000u 0:00.000

шестнадцатеричная информация о заголовке:

$ xxd blah.ppm|head -3
0000000: 5036 0a39 3236 2031 3931 0a32 3535 0af2  P6.926 191.255..
0000010: f1f0 0000 0000 0000 0000 0000 0000 0000  ................
0000020: 0000 0000 0000 0000 0000 0000 0000 0000  ................

$ xxd blah.png |head -3
0000000: 8950 4e47 0d0a 1a0a 0000 000d 4948 4452  .PNG........IHDR
0000010: 0000 039e 0000 00bf 0802 0000 0019 f594  ................
0000020: be00 0000 0373 4249 5408 0808 dbe1 4fe0  .....sBIT.....O.

Как видете, mogrify правильно сгенерированный файл PPM (см. P6).

Так что случилось?

Я задаюсь вопросом, существует ли что-то специальное о Ваших исходных изображениях, которые Вы преобразовываете в PPM, который не поддерживает формат PPM, и mogrify не может обработать это автоматически.

Я предложил бы опросить исходное изображение с помощью identify команда:

identify 

Редактирование № 1

OP отправил исходное изображение здесь. При выполнении этого изображения через меня я не мог воспроизвести его результат где mogrify возвратил бы файл PAM, а не файл PPM.

сгенерированный ppm:

mogrify -format ppm some.png

исходный png и новые ppm файлы:

 ll|grep some
-rw-rw-r-- 1 saml saml     387940 May 30 00:36 some.png
-rw-rw-r-- 1 saml saml     921615 May 30 07:00 some.ppm

$ identify some.p*
some.png PNG 640x480 640x480+0+0 8-bit DirectClass 388KB 0.000u 0:00.000
some.ppm[1] PNM 640x480 640x480+0+0 8-bit DirectClass 922KB 0.000u 0:00.009

информация о заголовке из файлов:

$ xxd some.png |head -3
0000000: 8950 4e47 0d0a 1a0a 0000 000d 4948 4452  .PNG........IHDR
0000010: 0000 0280 0000 01e0 0802 0000 00ba b34b  ...............K
0000020: b300 0020 0049 4441 5478 0184 c181 b21c  ... .IDATx......

$ xxd some.ppm |head -3
0000000: 5036 0a36 3430 2034 3830 0a32 3535 0a65  P6.640 480.255.e
0000010: 6e6b 656e 6b62 6e6a 626e 6a5f 706a 5f70  nkenkbnjbnj_pj_p
0000020: 6a5e 726b 5e72 6b5a 6d66 596c 6559 6a64  j^rk^rkZmfYleYjd

Файл, преобразованный успешно для меня. Выполнение display some.ppm отображенный файл, таким образом, я не уверен, что сделать из этого. Я действительно замечал, что OP's определяет, что команда показала файлы sRGB whlie в моей системе, которую эти файлы разоблачают как "8-разрядный DirectClass". Различия между этими 2 детализированы здесь, но я не уверен, что сделать из него.

При исследовании этого я столкнулся с несколькими потоками, где были ошибки в ImageMagick, связанном с sRBG и PNG. Вот ссылка на один пример.

4
06.08.2014, 17:30
6 ответов

Используйте -i вариант:

wget -i ./url.txt

Из man wget:

-i файл

--input-file=file

-читайте URL-адреса из локального или внешнего файла. Если - указан как файл, то URL читаются со стандартного входа. (Используйте ./- для читать из файла с буквальным названием -). Если эта функция используется, то никаких URL-адресов должны присутствовать в командной строке. Если есть URL в в командной строке и во входном файле, в командной строке будут первые, кто был найден. Если не указан --force-html, то файл должен состоять из серии URL, по одному на строку.

Однако, если вы укажете --force-html, то документ будет рассматриваться как хтмл. В этом случае у вас могут возникнуть проблемы с относительными ссылками, которые вы можете решить любую проблему, добавив "" в документы. или указав в командной строке --base=url.

Если файл является внешним, то документ будет автоматически обрабатывается как html, если тип Content-Type совпадает с текстом/html. Более того, местоположение файла будет имплицитно использовано в качестве базового href, если ни один из них не был specified.

6
27.01.2020, 20:45

wget имеет возможность сделать именно так:

wget --input-file url.txt

прочитает один URL на строку из url.txt и загрузит их в текущую директорию последовательно.

В более общем плане, вы можете использовать xargs для такого рода вещей, в сочетании с wget или curl:

xargs wget < url.txt
xargs curl -O < url.txt

xargs читает каждую строку из своего входа и предоставляет ее в качестве аргумента к команде, которую вы даете. Здесь эта команда представляет собой wget или curl -O, которые загружают URL и сохраняют его в текущий каталог. < url.txt предоставляет содержимое url.txt в качестве входа в команду xargs.


Проблема с вашим Python-кодом заключается в том, что то, что вы получаете из urllib - это данные байт, которые вы затем распечатываете непосредственно в файл, который строчит байты к b'abc\00\0a...' (именно так вы пишете байтовые литералы).

.
5
27.01.2020, 20:45

Есть два других метода:

wget $(<file)

и

while read -r link; do wget "$link"; done < file
1
27.01.2020, 20:45

Я бы сделал это в оболочке с wget.

while read y; do
     wget "$y"
done < url.txt
2
27.01.2020, 20:45

с w3m:

echo 'http://unix.stackexchange.com/questions/148670/save-html-to-text-file' |
tee - - - | 
xargs -n1 w3m -dump | 
sed '/Save html/!d;N;N;N;N;N;N;N' 

Мне кажется, что xargs даже не должны быть нужны - конечно, есть настройка для нескольких урлов одновременно, но в данный момент я не могу прослушивать их. В любом случае, xargs работает:

Save html to text file

            I'd like to save some (plain HTML) web pages to text file, from URL
            stored in text files as well.

            Here's an exemple of the input file containing the URLs:

            ~$: head -3 url.txt
Save html to text file

            I'd like to save some (plain HTML) web pages to text file, from URL
            stored in text files as well.

            Here's an exemple of the input file containing the URLs:

            ~$: head -3 url.txt
Save html to text file

            I'd like to save some (plain HTML) web pages to text file, from URL
            stored in text files as well.

            Here's an exemple of the input file containing the URLs:

            ~$: head -3 url.txt
Save html to text file

            I'd like to save some (plain HTML) web pages to text file, from URL
            stored in text files as well.

            Here's an exemple of the input file containing the URLs:

            ~$: head -3 url.txt
2
27.01.2020, 20:45

Лично я бы просто сохранил AC UniProt в файле:

$ cat names
P32234
P05552
P07701

Затем вы можете использовать один и тот же файл для различных операций. Например, чтобы загрузить соответствующий плоский файл из UniProt, введите его в цикл:

while read prot; do 
    wget http://www.uniprot.org/uniprot/"$prot".txt -O "$prot".flat
done < names

Поскольку ваш файл теперь имеет только доступ, вы можете повторно использовать его, чтобы получить, например, соответствующие идентификаторы:

$ while read prot; do  
    printf "%s\t" "$prot"
    wget http://www.uniprot.org/uniprot/"$prot".txt -O - | 
        awk '$1=="ID"{print $2}'; 
 done 2>/dev/null < names 
P32234  128UP_DROME
P05552  ADF1_DROME
P07701  SGS5_DROME
1
27.01.2020, 20:45

Теги

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