2012-07-28 122 views
1

使用下面的代碼,我得到了正確的信息 - 文件類型。下面的代碼:用Python創建空格分隔文件

filename = raw_input('What would you like to name the file? ') 

import csv 

data = [frames] 
out = csv.writer(open(filename,"w"), delimiter=' ',quoting=csv.QUOTE_MINIMAL) 
out.writerows(data) 

這會產生一些看起來像這樣的文本文件:

"[255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
    0 0]" "[ 0 171 171 171 171 171 171 171 171 171 171 171 171 171 171 171 171 171 
171 171]" 

我想這些信息是這樣的:

255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 []0 255 255 255 255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 

的2個支架代表一個字符,表示新的一行信息。這是我的文本編輯器上的一個小矩形,我不確定角色是什麼。

那麼,如何擺脫引號和括號並使用其他字符?

編輯:

我嘗試使用下面的代碼,並得到了以下錯誤:

Traceback (most recent call last): 
    File "(stdin)", line 1, in (module) 
    File "backandforth3.py", line 154, in (module) 
    out.write(' '.join(frame)) 
Type Error: sequence item 0: expect string, numpy.int32 found 
+0

對不起沒意識到!我會得到更新的。 – 2012-07-29 03:24:49

回答

4

我假設你使用記事本作爲文本編輯器? Unix樣式的換行符(\n)在記事本中顯示爲框,因爲它僅支持Windows換行符(\r\n)。這就是說,這應該提供輸出你期待:

filename = raw_input('What would you like to name the file? ') 

with open(filename, 'wb') as out: 
    for frame in frames: 
     out.write(' '.join(str(num) for num in frame)) 
     out.write('\r\n') 

沒有理由在另一個列表包frames;假設變量是數字列表的列表,如預期的輸出結果所示,這應該可以正常工作。另外,如果您絕對必須擁有您在輸出中描述的「框」,請將'\r\n'替換爲'\n'

+0

我想我們可以假設OP寧願用'csv'來做這件事。 – 2012-07-28 02:59:52

+0

@JoelCornett,他的輸入看起來很簡單,'csv'模塊過度殺傷。當分隔符是空格和換行符時,不需要轉義數字。 – Fraxtil 2012-07-28 03:02:53

+0

我試過這段代碼,它給了我一個錯誤。請參閱上面的修改。 – 2012-07-28 18:29:06

0

如果frames是numpy的陣列比你可以使用numpy.savetxt()功能:

numpy.savetxt(filename, frames) 

要解決您的csv代碼以二進制方式打開wb的文件,以避免線路的腐敗結束,不裹frames在另一個列表似乎已經是2D陣列了:

import csv 

with open(filename,"wb") as f: 
    writer = csv.writer(f, delimiter=' ', quoting=csv.QUOTE_MINIMAL) 
    writer.writerows(frames) 
相關問題