我正在编写一些脚本来处理python中的一些文本文件。本地脚本从单个txt文件读取,因此我使用
index_file = open('index.txt', 'r')
for line in index_file:
....
并遍历文件以查找匹配的字符串,但在使用amazon EMR时,index.txt文件本身会在单个文件夹中拆分为多个txt文件。
因此,我想在本地复制并从多个txt文件中读取某个字符串,但我很难找到干净的代码来执行此操作。
在编写最少代码时,最好的方法是什么?
答案 0 :(得分:1)
import os
from glob import glob
def readindex(path):
pattern = '*.txt'
full_path = os.path.join(path, pattern)
for fname in sorted(glob(full_path)):
for line in open(fname, 'r'):
yield line
# read lines to memory list for using multiple times
linelist = list(readindex("directory"))
for line in linelist:
print line,
此脚本定义了一个生成器(see this question for details about generators),用于遍历目录“directory”中按排序顺序扩展名为“txt”的所有文件。它产生所有行作为一个流,在调用函数之后可以迭代通过,就好像这些行来自一个打开的文件,因为这似乎是问题作者想要的。打印行末尾的逗号确保换行不会打印两次,尽管for循环的内容无论如何都会被问题作者替换。在这种情况下,可以使用line.rstrip()来删除换行符。
glob模块根据Unix shell使用的规则查找与指定模式匹配的所有路径名,尽管结果以任意顺序返回。