【发布时间】:2013-03-04 15:36:03
【问题描述】:
我想知道 Python 编程的一个非常基本的事情,因为我现在是一个非常基本的程序员):如何将结果(列表、字符串或其他)保存到 Python 中的文件中? 我一直在寻找很多,但我找不到任何好的答案。 我在考虑“.write ()”方法,但是(例如)它似乎不适用于字符串,但我也不知道它应该做什么。 所以,我的情况是我有二进制文件,我想编辑它,因此我发现很容易将它们转换为字符串,修改它们,现在我想将它们保存 i)回二进制文件(jpegs 图像) ii) 在我想要的文件夹中。 我该怎么做?我需要一些帮助。
更新
这是我要运行的脚本:
import os, sys
newpath= r'C:/Users/Umberto/Desktop/temporary'
if not os.path.exists (newpath):
os.makedirs (newpath)
data= open ('C:/Users/Umberto/Desktop/Prove_Script/Varie/_BR_Browse.001_2065642654_1.BINARY', 'rb+')
edit_data= str (data.read () )
out_dir= os.path.join (newpath, 'feed', 'address')
data.close ()
# do my edits in a secon time...
edit_data.write (newpath)
edit_data.close ()
我得到的错误是:
AttributeError: 'str' object has no attribute 'write'
UPDATE_2
我尝试使用pickle模块来序列化我的二进制文件,修改它并在最后保存它,但仍然没有让它工作......这是我迄今为止一直在尝试的:
import cPickle as pickle
binary= open ('C:\Users\Umberto\Desktop\Prove_Script\Varie\_BR_Browse.001_2065642654_1.BINARY', 'rb')
out= open ('C:\Users\Umberto\Desktop\Prove_Script\Varie\preview.txt', 'wb')
pickle.dump (binary, out, 1)
TypeError Traceback (most recent call last)
<ipython-input-6-981b17a6ad99> in <module>()
----> 1 pprint.pprint (pickle.dump (binary, out, 1))
C:\Python27\ArcGIS10.1\lib\copy_reg.pyc in _reduce_ex(self, proto)
68 else:
69 if base is self.__class__:
---> 70 raise TypeError, "can't pickle %s objects" % base.__name__
71 state = base(self)
72 args = (self.__class__, base, state)
TypeError: can't pickle file objects
我没有得到的另一件事是,如果我应该创建一个指向的文件(在我的情况下,我必须创建“out”,否则我不会为 pickle 方法提供正确的参数)或这不是必需的。 希望我能接近解决方案。
P.S.:我也尝试了 pickle.dumps (),但没有达到更好的结果......
【问题讨论】:
-
write以何种方式不能用于字符串?在任何情况下,如果您想将列表等保存到文件中,最好使用pickle,但这与使用 JPEG 或其他二进制文件完全不同 -
我将编辑我的问题,以便您可以看到我正在尝试做什么,即使我知道我使用 '.write ()' 模块的部分是完全错误的,因为我仍然不知道不知道怎么用...
-
你能显示你正在尝试的代码吗?否则无法回答这个问题。
-
您需要打开一个文件句柄来写入 - 类似
outf = open(newpath, "w"),然后执行outf.write(edit_data),然后执行outf.close()。您不会从字符串本身调用write。你看出区别了吗?