在bashshell中使用python2.6从目录中读取文件的正确方法

unguejic  于 2021-05-27  发布在  Hadoop
关注(0)|答案(2)|浏览(445)

我正在尝试读入文件进行文本处理。
这个想法是使用我正在编写的map reduce代码在我的虚拟机上通过hadoop伪分布式文件系统运行它们。接口是ubuntulinux,我是用python2.6运行的安装。我需要使用 sys.stdin 用于读取文件,以及 sys.stdout 所以我从Map器到还原器。
下面是我的Map器测试代码:


# !/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 一个目录中的文件。
谢谢!

h79rfbju

h79rfbju1#

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


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

我的建议是通过命令行参数输入目录名,而不是像上面那样通过stdin。
如果你想调整输出的格式,请让我知道。希望这有帮助。

332nm8kg

332nm8kg2#

files=os.listdir(路径)
使用此选项列出所有文件,然后应用循环。

相关问题