mirror of https://github.com/stenzek/duckstation
				
				
				
			Add script for converting compatibility XML to CSV
							parent
							
								
									f901b23aad
								
							
						
					
					
						commit
						f49c2dedf6
					
				@ -0,0 +1,56 @@
 | 
				
			|||||||
 | 
					import sys
 | 
				
			||||||
 | 
					import argparse
 | 
				
			||||||
 | 
					import xml.etree.ElementTree as ET
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def convert_list(filename, separator=','):
 | 
				
			||||||
 | 
					    fields = ["Game Code", "Game Title", "Region", "Compatibility", "Upscaling Issues", "Version tested", "Comments"]
 | 
				
			||||||
 | 
					    output = separator.join(fields) + "\n"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    tree = ET.parse(filename)
 | 
				
			||||||
 | 
					    for child in tree.getroot():
 | 
				
			||||||
 | 
					        if (child.tag != "entry"):
 | 
				
			||||||
 | 
					            print("!!! Skipping invalid tag '%s'" % child.tag)
 | 
				
			||||||
 | 
					            continue
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        game_code = child.get("code") or ""
 | 
				
			||||||
 | 
					        game_title = child.get("title") or ""
 | 
				
			||||||
 | 
					        region = child.get("region") or ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        node = child.find("compatibility")
 | 
				
			||||||
 | 
					        compatibility = node.text if node is not None else ""
 | 
				
			||||||
 | 
					        node = child.find("upscaling-issues")
 | 
				
			||||||
 | 
					        upscaling_issues = node.text if node is not None else ""
 | 
				
			||||||
 | 
					        node = child.find("version-tested")
 | 
				
			||||||
 | 
					        version_tested = node.text if node is not None else ""
 | 
				
			||||||
 | 
					        node = child.find("comments")
 | 
				
			||||||
 | 
					        comments = node.text if node is not None else ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        fix = None
 | 
				
			||||||
 | 
					        if separator == '\t':
 | 
				
			||||||
 | 
					            fix = lambda x: x.replace('\t', '  ')
 | 
				
			||||||
 | 
					        elif separator == ',':
 | 
				
			||||||
 | 
					            fix = lambda x: x if x.find(',') < 0 else ("\"%s\"" % x)
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            fix = lambda x: x
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        entry_fields = [fix(game_code), fix(game_title), fix(region), fix(compatibility), fix(upscaling_issues), fix(version_tested), fix(comments)]
 | 
				
			||||||
 | 
					        output += separator.join(entry_fields) + "\n"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return output
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if __name__ == "__main__":
 | 
				
			||||||
 | 
					    parser = argparse.ArgumentParser()
 | 
				
			||||||
 | 
					    parser.add_argument("--tabs", action="store_true")
 | 
				
			||||||
 | 
					    parser.add_argument("list_file", action="store")
 | 
				
			||||||
 | 
					    parser.add_argument("output_file", action="store")
 | 
				
			||||||
 | 
					    args = parser.parse_args()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    output = convert_list(args.list_file, '\t' if args.tabs else ',')
 | 
				
			||||||
 | 
					    output_file = open(args.output_file, "w")
 | 
				
			||||||
 | 
					    output_file.write(output)
 | 
				
			||||||
 | 
					    output_file.close()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
					Loading…
					
					
				
		Reference in New Issue