使用 Python 2.6 in bash shell 从目录中读取文件的正确方法

Proper way of reading in files from a directory using Python 2.6 in bash shell

我正在尝试读入文件进行文本处理。

我的想法是 运行 使用我正在编写的 map-reduce 代码通过虚拟机上的 Hadoop 伪分布式文件系统 运行 它们。界面是UbuntuLinux,我是运行ningPython2.6随装。我需要使用 sys.stdin 来读取文件,并且 sys.stdout 所以我从 mapper 传递到 reducer。

这是我的映射器测试代码:

#!/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 文件。

谢谢!

文件 = os.listdir(路径)

使用这个列出所有文件,然后申请循环。

我仍然不完全理解您的预期输出是什么(列表或普通 文本),以下将起作用:

#!/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

我的建议是通过命令行参数提供目录名称,而不是像上面那样通过标准输入。
如果您想调整输出格式,请告诉我。 希望这有帮助。