簡體   English   中英

Python:將大量數組寫入文本文件

[英]Python: writing large array of arrays to text file

我是Python的新手,我有一個解決方案,但它似乎緩慢而愚蠢,所以我想知道是否有更好的方法?

假設我有一個像這樣定義的矩陣:

mat = [['hello']*4 for x in xrange(3)]

我正在使用此函數將其寫入文件:

def writeMat(mat, outfile):
  with open(outfile, "w") as f:
    for item in mat:
      f.writelines(str(item).replace('[','').replace(',','').replace('\'','').replace(']','\n'))

writeMat(mat, "temp.txt")

它給出了一個看起來像這樣的文本文件:

hello hello hello hello
hello hello hello hello
hello hello hello hello

我正在處理的文件非常大。 numpy中的savetxt函數會很棒,但是我不希望將它存儲為numpy數組,因為雖然矩陣的大部分由單個字符元素組成,但前幾列的長度將是多個字符,似乎對我來說(如果我錯了,請糾正我)這意味着整個矩陣將使用比必要更多的內存,因為矩陣中的每個元素都將是最大元素的大小。

如果我理解你的問題,你可以這樣做:

f.writelines(' '.join(row) + '\n' for row in mat)

要么

f.write('\n'.join(' '.join(row) for row in mat))

第一個優點是作為生成器表達式,只生成當前行的連接字符串副本

如果你的矩陣條目不是字符串,你可以這樣做:

f.writelines(' '.join(str(elem) for elem in row) + '\n' for row in mat)

編輯

看來file.writelines()方法在將整個生成器表達式寫入文件之前對其進行計算。 所以以下內容可以最大限度地減少內存消

for row in mat:
    f.write(' '.join(row) + '\n')

你可以使用csv模塊

import csv

with open(outfile, 'wb') as f:
     csv.writer(f, delimiter=' ').writerows(mat)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM