我试图将目录中的大约200个文件顺序读入数组: 2种方法:
results = [open(f) for f in glob.glob("*.bin")]
这里,这给了我一个错误,很多文件都被打开了。
for f in glob.glob("*.bin"):
print f
这给了我一个无序列表,我不知道如何使用sorted(f,key=itemgetter(0))
此外,一旦我将文件0读入数组,我需要进行一些数组排序,然后与文件1中的数据连接,依此类推,直到目录中的最后一个文件为止(假设文件0,文件1都在升序)。为此,我声明x0 = 0然后以这种方式连接它:
x = numpy.concatenate((x0, x), axis=1)
提前感谢任何建议!
编辑1:
我用这种方式尝试了你的方法:
x0 = numpy.zeros(shape=(1026, 718))
f = sorted(glob.glob('*.bin'))
for f in sorted(glob.glob('*.bin')):
print f ## prints files ordered
x = numpy.concatenate((x0, x), axis=1)
x0 = x
我收到以下错误:
x = numpy.concatenate((x0, x), axis=1)
MemoryError
答案 0 :(得分:0)
可能希望一次只打开一个文件:
def my_open(path):
with open(path, 'r') as f:
return numpy.loadtxt(f)
如果您只需要ls
之类的排序顺序,则可以通过sorted
传递列表。如果您需要更高级的东西,请参阅sorting howto。
如果您可以将所有记录放入可用内存的一半,这可能会更快一些:
numpy.concatenate(map(my_open, sorted(glob('*.bin'))))
否则你可以在循环中连接并节省内存:
arr = numpy.zeros()
for path in sorted(glob('*.bin')):
arr = numpy.concatenate((arr, my_open(path))
答案 1 :(得分:0)
我不清楚你得到了什么错误。你想按文件名排序吗?然后在返回的文件名列表中更有意义:
filenames = sorted(glob.glob('*.bin'))
然后您可以浏览文件名列表并连续读取文件以提取所需的数据。
for filename in sorted(glob.glob('*.bin')):
f = open(filename)
# Perform your necessary array ordering
# Concatenate the data
如果你想向后执行此操作,那就是将上一个文件中的数据读入x
,然后读取并追加倒数第二个数据,然后将排序更改为
sorted(glob.glob('*.bin'), reverse = True)