无法使用write(line)写入文件

时间:2014-11-20 21:23:49

标签: python python-2.7

当我尝试将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)

4 个答案:

答案 0 :(得分:1)

来自the docs on i/o

  

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)

lineDataFrame对象,不是字符缓冲区对象,因此无法直接写入文件处理程序。要保持格式化等(取决于你的df的内容),你可以尝试调用to_json()函数,然后将生成的JSON字符串写入你的文件。或者,您可以使用to_pickle()来挑选数据框,并将其写入文件。

答案 3 :(得分:0)

要编写和阅读复杂对象,您可以使用pickle