Пожалуйста go через это. Это помогло бы.
Ошибка при использовании команды 'find' для создания файла коллекции на opencv
Команды, упомянутые на странице WikiExtractor, предназначены для Unix / Linux system и не будет работать на Windows.
Команда find
, которую вы запустили на windows, работает иначе, чем в unix / linux.
Извлеченная часть работает отлично подходит для обоих окон / linux env, если вы запускаете его с префиксом python.
python WikiExtractor.py -cb 250K -o extracted your_bz2_file
Вы увидите папку extracted
, созданную в том же каталоге, что и ваш скрипт.
После этого команда find
должна работать так, только на linux.
find extracted -name '*bz2' -exec bzip2 -c {} \; > text.xml
найдите в папке extracted
все, что соответствует bz2, а затем выполните команду bzip2
для этого файла и поместите результат в текстовый файл. xml file.
Кроме того, если вы запустите команду bzip -help
, которая должна выполняться с командой find
выше, вы увидите, что она не будет работать на Windows, а для Linux вы получите следующий вывод.
gaurishankarbadola@ubuntu:~$ bzip2 -help
bzip2, a block-sorting file compressor. Version 1.0.6, 6-Sept-2010.
usage: bzip2 [flags and input files in any order]
-h --help print this message
-d --decompress force decompression
-z --compress force compression
-k --keep keep (don't delete) input files
-f --force overwrite existing output files
-t --test test compressed file integrity
-c --stdout output to standard out
-q --quiet suppress noncritical error messages
-v --verbose be verbose (a 2nd -v gives more)
-L --license display software version & license
-V --version display software version & license
-s --small use less memory (at most 2500k)
-1 .. -9 set block size to 100k .. 900k
--fast alias for -1
--best alias for -9
If invoked as `bzip2', default action is to compress.
as `bunzip2', default action is to decompress.
as `bzcat', default action is to decompress to stdout.
If no file names are given, bzip2 compresses or decompresses
from standard input to standard output. You can combine
short flags, so `-v -4' means the same as -v4 or -4v, &c.
Как уже упоминалось выше, действие bzip2 по умолчанию заключается в сжатии, поэтому используйте bzcat для распаковки.
Измененная команда, которая будет работать только на linux, будет выглядеть следующим образом.
find extracted -name '*bz2' -exec bzcat -c {} \; > text.xml
Он работает в моей системе Ubuntu.
РЕДАКТИРОВАТЬ :
Для Windows:
ПЕРЕД ТЕМ, ЧТОБЫ ПОПРОБОВАТЬ, ПОЖАЛУЙСТА GO ПЕРВЫЙ ИНСТРУКЦИЯ
- Создайте отдельную папку и t файлы в папке. Файлы ->
WikiExtractor.py
и itwiki-latest-pages-articles1.xml-p1p277091.bz2
(в моем случае это небольшой файл, который я смог найти).
2. Откройте командную строку в текущем каталоге и выполните следующую команду, чтобы извлечь все файлы.
python WikiExtractor.py -cb 250K -o extracted itwiki-latest-pages-articles1.xml-p1p277091.bz2
Это займет время в зависимости от размера файла, но теперь каталог будет выглядеть следующим образом.
ВНИМАНИЕ : если у вас уже есть извлеченная папка, переместите ее в текущий каталог, чтобы он соответствовал изображению выше и вам больше не нужно делать извлечение.
Скопируйте, вставьте приведенный ниже код и сохраните его в файле
bz2_Extractor.py
.
import argparse
import bz2
import logging
from datetime import datetime
from os import listdir
from os.path import isfile, join, isdir
FORMAT = '%(levelname)s: %(message)s'
logging.basicConfig(format=FORMAT)
logger = logging.getLogger()
logger.setLevel(logging.INFO)
def get_all_files_recursively(root):
files = [join(root, f) for f in listdir(root) if isfile(join(root, f))]
dirs = [d for d in listdir(root) if isdir(join(root, d))]
for d in dirs:
files_in_d = get_all_files_recursively(join(root, d))
if files_in_d:
for f in files_in_d:
files.append(join(f))
return files
def bzip_decompress(list_of_files, output_file):
start_time = datetime.now()
with open(f'{output_file}', 'w+', encoding="utf8") as output_file:
for file in list_of_files:
with bz2.open(file, 'rt', encoding="utf8") as bz2_file:
logger.info(f"Reading/Writing file ---> {file}")
output_file.writelines(bz2_file.read())
output_file.write('\n')
stop_time = datetime.now()
print(f"Total time taken to write out {len(list_of_files)} files = {(stop_time - start_time).total_seconds()}")
def main():
parser = argparse.ArgumentParser(description="Input fields")
parser.add_argument("-r", required=True)
parser.add_argument("-n", required=False)
parser.add_argument("-o", required=True)
args = parser.parse_args()
all_files = get_all_files_recursively(args.r)
bzip_decompress(all_files[:int(args.n)], args.o)
if __name__ == "__main__":
main()
Теперь текущий каталог будет выглядеть следующим образом.
Теперь откройте cmd в текущем каталоге и выполните следующую команду.
Пожалуйста, прочитайте, что каждый ввод делает в команде.
python bz2_Extractor.py -r extracted -o output.txt -n 10
-r
: Каталог root, в котором находятся файлы bz2.
-o
: имя выходного файла
-n
: количество записываемых файлов. [Если не предоставлено, он записывает все файлы в каталоге root]
ВНИМАНИЕ : я вижу, что ваш файл в гигабайтах и в нем более полумиллиона статей. Если вы попытаетесь поместить это в один файл с помощью приведенной выше команды, я не уверен, что произойдет, или если ваша система сможет пережить это, и если она все же выживет, выходной файл будет таким большим, поскольку он извлекается из 2.8. Файл GB, я не думаю, что Windows ОС сможет открыть его напрямую.
Поэтому я предлагаю обрабатывать 10000 файлов одновременно.
Дайте мне знать, если это работает для вас.
PS: Для приведенной выше команды вывод выглядит следующим образом.