Python - glob.glob с grep? - PullRequest
       71

Python - glob.glob с grep?

0 голосов
/ 27 апреля 2020

Я довольно новичок в среде Python и постепенно продвигаюсь вперед.

Мы собрали около 10000 файлов в папке, содержащей аналогичную информацию, но с одним существенным отличием. Некоторые файлы содержат строку «string1», а другой набор содержит «string2». Просто чтобы уточнить строку не в имени файла, а в самом файле. Содержимое файла разделено символами.

Я попытался создать два отдельных списка со строкой 1 и соответственно строкой 2 и получил различные строки кода, но ничего не получилось. Оба списка должны содержать только имя файла.

Ответы [ 2 ]

2 голосов
/ 27 апреля 2020

Я часто использую grep для подобных вещей. В этом случае я бы использовал

Отредактировано для добавления расширений файлов:

grep -l string1 *.txt > string1_files.txt && grep -l string2 *.txt> string2_files.txt 

Этот oneliner будет искать string1 в txt файлах в текущем каталоге, запись вывода в string1_files.txt и аналогично для string2

копирование из man grep

 -l, --files-with-matches
         Only the names of files containing selected lines are written to
         standard output.  grep will only search a file until a match has
         been found, making searches potentially less expensive.  Path-
         names are listed once per file searched.  If the standard input
         is searched, the string ``(standard input)'' is written.

Надеюсь, это немного поможет, но вам может потребоваться выполнить поиск только определенных расширений файлов

Редактировать без расширений файлов: (если они недоступны, как в комментариях к вопросу

grep -l string1 * > string1_files.txt && grep -l string2 *> string2_files.txt 
0 голосов
/ 27 апреля 2020

Если в вашем файле есть строка, которую вы хотите сравнить, вам нужно просто сделать

folder = 'foo'
files = glob.glob(os.path.join(folder, "*"))

list1 = []
list2 = []
for file in files:
  with open(file, 'r') as f:
    if(f.readlines().strip() == 'string1'):
      list1.append(file)
    else
      list2.append(file)

Если в ваших файлах больше данных, вам просто нужно обработать f.readlines() и сравнить правильно.

...