zooted
zooted

Reputation: 165

writing instead of printing, Python 2.7

My code for this works perfectly. I can print to the screen exactly how I want it. However, I want it to write to a file so that I can view the file instead of the print screen. So I've tried to do the following but I'm coming up with a few issues. Error message:

from xml.dom import minidom
import sys
import os, fnmatch


def find_files(directory, pattern):
    for root, dirs, files in os.walk(directory):
        for basename in files:
        if fnmatch.fnmatch(basename, pattern):
            filename = os.path.join(root, basename)
            yield filename

for filename in find_files('c:/Python27','*file.xml'): 
    print ('Found file.xml:', filename)


xmldoc = minidom.parse(filename)
itemlist = xmldoc.getElementsByTagName('Game')
for item in itemlist:
    year = item.getElementsByTagName('Year')
    for s in year:
        print item.attributes['name'].value, s.attributes['value'].value

TypeError: function takes exactly 1 argument (2 given),code with the write function instead:

from xml.dom import minidom
import sys
import os, fnmatch


def find_files(directory, pattern):
    for root, dirs, files in os.walk(directory):
        for basename in files:
        if fnmatch.fnmatch(basename, pattern):
            filename = os.path.join(root, basename)
            yield filename
f = open('test.txt','w')
for filename in find_files('c:/Python27','*file.xml'): 
    f.write('Found file.xml:', filename)


xmldoc = minidom.parse(filename)
itemlist = xmldoc.getElementsByTagName('Game')
for item in itemlist:
    year = item.getElementsByTagName('Year')
    for s in year:
        f.write (item.attributes['name'].value), f.write(s.attributes['value'].value)

Upvotes: 0

Views: 56

Answers (1)

one_observation
one_observation

Reputation: 464

If you want to make your two arguments into a single line (that f.write will accept) you can do something like

f.write("Found file.xml:" + filename + "\n")

+ will concatenate the elements and give you a single string with a newline at the end, for a neat stack of the elements you were looking for in a final file.

As it is, the Error message looks like it's telling you exactly what the problem is -- f.write really does take only one argument, and having a comma in the function call indicates a second argument.

Upvotes: 1

Related Questions