我的代码出现问题。我希望能够将报告(字典)写入文件。我有这个作为我的报告:
{longs: ['stretched']
avglen: 4.419354838709677
freqs: {'could': 1, 'number': 1, 'half': 1, 'scorned': 1, 'come': 2, 'numbers': 1, 'rage': 1, 'metre': 1, 'termed': 1, 'heavenly': 1, 'touches': 1, 'i': 1, 'their': 1, 'poets': 1, 'a': 2, 'lies': 1, 'verse': 1, 'an': 1, 'as': 1, 'eyes': 1, 'touched': 1, 'knows': 1, 'tongue': 1, 'not': 1, 'yet': 1, 'filled': 1, 'heaven': 1, 'of': 4, 'earthly': 1, 'hides': 1, 'to': 2, 'stretched': 1, 'deserts': 1, 'this': 1, 'tomb': 1, 'write': 1, 'yellowed': 1, 'that': 1, 'alive': 1, 'some': 1, 'so': 1, 'such': 1, 'should': 2, 'like': 1, 'than': 1, 'antique': 1, 'yours': 1, 'but': 2, 'age': 2, 'less': 1, 'fresh': 1, 'time': 2, 'rhyme': 1, 'true': 1, 'neer': 1, 'all': 1, 'in': 4, 'live': 1, 'be': 2, 'your': 6, 'who': 1, 'truth': 1, 'child': 1, 'twice': 1, 'shows': 1, 'poet': 1, 'most': 1, 'life': 1, 'song': 1, 'will': 1, 'my': 3, 'if': 2, 'parts': 1, 'were': 2, 'you': 1, 'is': 1, 'papers': 1, 'it': 3, 'which': 1, 'rights': 1, 'with': 2, 'say': 1, 'old': 1, 'beauty': 1, 'high': 1, 'and': 5, 'would': 1, 'believe': 1, 'faces': 1, 'though': 1, 'men': 1, 'graces': 1, 'the': 2}
shorts: ['i', 'a']
count: 93
mosts: your}
我的代码是:
def write_report(r, filename):
input_file=open(filename, "w")
for k, v in r.items():
line = '{}, {}'.format(k, v)
print(line, file=input_file)
input_file.close()
return input_file
但如果我将r命名为报告,则会给出语法错误。
我现在将其更改为此代码:
def write_report(r, filename):
with open(filename, "w") as f:
for k, v in r.items():
f.write('{}, {}'.format(k, v) )
return f
但是我收到了这个错误:
<_io.TextIOWrapper name='sonnet_017.txt' mode='w' encoding='UTF-8'>
答案 0 :(得分:3)
此
&lt; _io.TextIOWrapper name ='sonnet_017.txt'mode ='w'coding ='UTF-8'&gt;
不是错误消息。它是函数返回值的repr。您的函数中有return f
,因此它将返回文件对象。
E.g:
>>> f = open('junk.txt', 'w')
>>> f
<_io.TextIOWrapper name='junk.txt' mode='w' encoding='UTF-8'>
这是您的行动功能:
>>> r
{'bar': 12.345, 'foo': 'abc'}
>>> write_report(r, "junk.txt")
<_io.TextIOWrapper name='junk.txt' mode='w' encoding='UTF-8'>
现在回过头来看看我们得到了什么:
>>> with open("junk.txt", "r") as f:
... contents = f.read()
...
>>> contents
'bar, 12.345foo, abc'
至少,您可能希望在编写每个键/值对后修改write_report
函数以包含换行符:
f.write('{}, {}\n'.format(k, v) )