使用 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
我的建议是通过命令行参数提供目录名称,而不是像上面那样通过标准输入。
如果您想调整输出格式,请告诉我。
希望这有帮助。
我正在尝试读入文件进行文本处理。
我的想法是 运行 使用我正在编写的 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
我的建议是通过命令行参数提供目录名称,而不是像上面那样通过标准输入。
如果您想调整输出格式,请告诉我。
希望这有帮助。