我想在文本文件中写下列表的内容。 我目前的做法如下:
for k in li:
outp.write(str(k))
out.write('\n')
然而,这需要很长时间才能运行(我有数千万行)
有没有更快的方法?
示例行
列表来自稀疏矩阵,因此有很多零。非null元素仅为
例如这样的列表:[0 0 0 0 0 0 0 1 0 0 1 1 1 0 0]
数字由标签分隔
答案 0 :(得分:1)
你应该能够通过只写一次并省略所有这些手动演员来获得相当不错的速度:
out.write('\n'.join(li))
可能还有进一步的优化,但实际上你应该看一下基于二进制的字段格式,以便你拥有如此庞大的数组。
特别是marshal似乎很合适,但有更快的东西。
答案 1 :(得分:1)
我想知道存储1
s的坐标是否会产生所需的加速,正如你提到的那样,这是一个稀疏矩阵。请考虑以下事项:
写入文件:
def writeMatrix(matrix):
ones = [[i for i,num in row if num==1] for row in matrix]
with open('path/to/file', 'w') as outfile:
for row in ones:
outfile.write(' '.join(str(i) for i in row))
outfile.write('\n')
从文件中读取:
def readMatrix(infilepath, width):
answer = []
with open(infilepath) as infile:
for line in infile:
row = [None]*width
for i in set(int(i) for i in line.split()):
row[i] = 1
answer.append(row)
return answer