当我尝试将line
写入文件(f.write(line)
)
我收到此错误。 如何在文件中附加一行?
Traceback (most recent call last):
File "<pyshell#32>", line 1, in <module>
populateMatrix()
File "C:\Python27\1.py", line 19, in populateMatrix
doPivot(paramMatrix)
File "C:\Python27\1.py", line 27, in doPivot
f.write(line)
TypeError: expected a character buffer object
这里是完整的代码:
import glob
import os
from pprint import pprint
import numpy
import pandas
import fnmatch
def populateMatrix():
matches = []
paramMatrix = []
for root, dirnames, filenames in os.walk('C:\\Python27'):
for filename in fnmatch.filter(filenames, '*.txt1'):
matches.append(os.path.join(root, filename))
print root + '\\' + filename
with open(root + '\\' + filename) as f:
for line in f:
paramMatrix.append((root + '\\' + filename + '=' + line).split('='))
doPivot(paramMatrix)
def doPivot(data):
df=pandas.DataFrame(data, columns=['Fruit', 'Shop', 'Price'])
#print (df.pivot(index='Shop', columns='Fruit', values='Price'))
line=df.pivot(index='Shop', columns='Fruit', values='Price')
f = open('C:\\Python27\\myoutput\\output.txt','r+')
f.write(line)
答案 0 :(得分:1)
f.write(string)将string的内容写入文件,返回None。
>>> f.write('This is a test\n')
要编写字符串以外的内容,首先需要将其转换为字符串:
>>> value = ('the answer', 42)
>>> s = str(value)
>>> f.write(s)
因此,在尝试将line
写入文件之前,需要将{{1}}转换为字符串。
答案 1 :(得分:1)
您的df.pivot(index='Shop', columns='Fruit', values='Price')
不会生成文本字符串,而是生成Pandas DataFrame。要将其转换为字符串,您可以执行以下操作:
line=df.pivot(index='Shop', columns='Fruit', values='Price').to_string()
答案 2 :(得分:0)
line
是DataFrame
对象,不是字符缓冲区对象,因此无法直接写入文件处理程序。要保持格式化等(取决于你的df的内容),你可以尝试调用to_json()
函数,然后将生成的JSON字符串写入你的文件。或者,您可以使用to_pickle()
来挑选数据框,并将其写入文件。
答案 3 :(得分:0)
要编写和阅读复杂对象,您可以使用pickle