2012-07-28 125 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) 
相关问题