Правильный способ чтения файлов из каталога с использованием Python 2.6 в оболочке bash - PullRequest
0 голосов
/ 14 февраля 2019

Я пытаюсь читать в файлах для обработки текста.

Идея состоит в том, чтобы запустить их через псевдораспределенную файловую систему Hadoop на моей виртуальной машине, используя код сокращения карт, который я пишу.Интерфейс Ubuntu Linux, я использую Python 2.6 с установкой.Мне нужно использовать sys.stdin для чтения в файлах и sys.stdout, поэтому я перехожу от маппера к редуктору.

Вот мой тестовый код для картографа:

#!/usr/bin/env python

import sys
import string
import glob
import os

files = glob.glob(sys.stdin)
for file in files:
    with open(file) as infile:
        txt = infile.read()
        txt = txt.split()
    print(txt) 

Я не уверен, как glob работает с sys.stdin, и я получаю следующие ошибки:

Послетестирование с конвейером:

[training@localhost data]$ cat test | ./mapper.py

Я получаю это:

cat: test: Is a directory
Traceback (most recent call last):
  File "./mapper.py", line 8, in <module>
    files = glob.glob(sys.stdin)
  File "/usr/lib64/python2.6/glob.py", line 16, in glob
    return list(iglob(pathname))
  File "/usr/lib64/python2.6/glob.py", line 24, in iglob
    if not has_magic(pathname):
  File "/usr/lib64/python2.6/glob.py", line 78, in has_magic
    return magic_check.search(s) is not None
TypeError: expected string or buffer

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

Спасибо!

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Тем не менее, я не до конца понимаю, каков ваш ожидаемый результат (список или обычный текст), сработало бы следующее:

#!/usr/bin/env python

import sys, glob

dir = sys.stdin.read().rstrip('\r\n')
files = glob.glob(dir + '/*')
for file in files:
    with open(file) as infile:
        txt = infile.read()
        txt = txt.split()
    print(txt)

Затем выполните с:

echo "test" | ./mapper.py

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

0 голосов
/ 14 февраля 2019

files = os.listdir (путь)

Используйте это, чтобы перечислить все файлы, а затем применить к циклу.

...