[英]Writing an object to python file
我有以下代码:
matrix_file = open("abc.txt", "rU")
matrix = matrix_file.readlines()
keys = matrix[0]
vals = [line[1:] for line in matrix[1:]]
ea=open("abc_format.txt",'w')
ea.seek(0)
ea.write(vals)
ea.close()
但是我收到以下错误:
TypeError: expected a character buffer object
如何缓冲输出,变量vals
是什么数据类型?
vals
是一个列表。 如果要将字符串列表而不是单个字符串写入文件,请使用writelines
:
ea=open("abc_format.txt",'w')
ea.seek(0)
ea.writelines(vals)
ea.close()
请注意,这不会为您插入换行符(尽管在特定情况下,字符串已经以换行符结尾,如注释中所指出)。 如果您需要添加换行符,可以执行以下示例:
ea=open("abc_format.txt",'w')
ea.seek(0)
ea.writelines([line+'\n' for line in vals])
ea.close()
首先,与其单独打开和关闭文件,不如使用可自动执行工作的语句 。关于错误,因为它说write
方法仅接受字符缓冲区对象,因此您需要将列表转换为字符串。
例如,您可以使用join
函数,该函数使用特定的定界符将可迭代对象中的项目连接在一起,并返回一个串联字符串。
with open("abc.txt", "rU") as f,open("abc_format.txt",'w') as out:
matrix = f.readlines()
keys = matrix[0]
vals = [line[1:] for line in matrix[1:]]
out.write('\n'.join(vals))
另外,作为文件对象是迭代器的一种更加Python化的方式,您可以在以下代码中进行操作,并通过调用其next
方法获得第一行,并将其余的传递给join
函数:
with open("abc.txt", "rU") as f,open("abc_format.txt",'w') as out:
matrix = next(f)
out.write('\n'.join(f))
您不能将对象“写入”文件。 而是使用pickle
模块:
matrix_file = open("abc.txt", "rU")
matrix = matrix_file.readlines()
keys = matrix[0]
vals = [line[1:] for line in matrix[1:]]
#pickling begins!
import pickle
f = open("abc_format.txt")
pickle.dump(vals, f) #call with (object, file)
f.close()
然后像这样阅读:
import pickle
f = open("abc_format.txt")
vals = pickle.load(f) #exactly the same list
f.close()
您可以使用任何类型的对象(您自己的对象或内置对象)执行此操作。 您只能将字符串和字节写入文件,python的open()
函数就像打开记事本一样将其打开。
要回答您的第一个问题, vals
是一个列表,因为[operation(i) for i in iterated_over]
任何内容[operation(i) for i in iterated_over]
都是列表理解,而列表理解会生成列表。 要查看任何对象的类型是什么,只需使用 type()
函数即可; 例如type([1,4,3])
示例: https : //repl.it/qKI/3
此处的文档: https : //docs.python.org/2/library/pickle.html和https://docs.python.org/2/tutorial/datastructures.html#list-comprehensions
write
功能将仅处理字符或字节。 要编写任意对象,请使用python的pickle
库。 与写pickle.dump()
与读回pickle.load()
但是,如果您真正想要的是以与输入相同的格式编写内容,则必须自己写出矩阵值和换行符。
for line in vals:
ea.write(line)
ea.close()
现在,您已编写了一个类似于abc.txt
的文件,但已删除了每一行的第一行和第一个字符。 (您在构造vals
时删除了它们。)
由于您选择将其命名为abc_format.txt
,因此abc_format.txt
我怀疑这是您的意图,但是无论如何,这就是您编写文本行列表的方式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.