Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # -*- coding: utf-8 -*-
- """
- Created on Fri Feb 3 07:42:37 2017
- @author: Eela6
- Python 3.6.0
- """
- from collections import defaultdict
- from string import ascii_uppercase
- import csv
- class Chip():
- def __init__(self, name, chip_id, img_filename, element, damage, letters, size, description, location):
- (self. name, self.chip_id, self.img_filename, self.element, self.damage, self.letters,
- self.size, self.description, self.location) = (
- name, chip_id, img_filename, element, damage, letters, size, description, location)
- def __str__(self):
- return self.name
- def __repr__(self):
- args = (self. name, self.chip_id, self.img_filename, self.element, self.damage, self.letters,
- self.size, self.description, self.location)
- return f'Chip{args}'
- def __hash__(self):
- return hash(self.chip_id)
- def as_tuple(self):
- return (self.name, self.chip_id, self.img_filename, self.element, self.damage, self.letters,
- self.size, self.description, self.location)
- def generate_chips(filename):
- with open(filename) as file:
- next(file)
- buffer = []
- for line in file:
- if not line.startswith('|-'):
- buffer.append(line)
- else:
- chip = ''.join(buffer)
- chip = chip.split('||')
- yield as_clean_chip(chip)
- buffer = []
- def strip_brackets_and_newlines(string):
- string = string.strip('[')
- string= string.strip('\n')
- string = string.strip(']')
- return string
- def as_clean_chip(chip):
- def clean_id(id_):
- return id_.strip('|')
- def clean_img_filename(img_filename):
- return img_filename[7:-2]
- def clean_name(name):
- name = strip_brackets_and_newlines(name)
- name = name.split()[0]
- return name
- def clean_and_separate_damage_letters_size(damage_letters_size):
- damage, letters, size = damage_letters_size.split('\n')
- letters = letters.strip('|')
- letters = letters.replace(',', '')
- letters = letters.split()
- size = size.strip('|')
- return damage, letters, size
- def clean_and_separate_letters(letters):
- letters = letters.strip('|')
- letters = letters.replace(',', '')
- letters = letters.split()
- def clean_element(element):
- element = element.split()[-1]
- element = element[:-6]
- if element == 'Null':
- element = 'None'
- return element
- def clean_description(description):
- return strip_brackets_and_newlines(description)
- def clean_location(location):
- location = strip_brackets_and_newlines(location)
- chip_id, img_filename, name, element, damage_letters_size, description, location = chip
- chip_id = clean_id(chip_id)
- img_filename = clean_img_filename(img_filename)
- name = clean_name(name)
- damage, letters, size = clean_and_separate_damage_letters_size(damage_letters_size)
- element = clean_element(element)
- location = clean_location(location)
- chip = Chip(name, chip_id, img_filename, element, damage, letters, size, description, location)
- return chip
- def write_to_csv(filename, chips):
- with open(filename, 'w') as file:
- writer = csv.writer(file)
- header = 'NAME', 'ID', 'IMG', 'SIZE', 'DAMAGE', 'ELEMENT', 'LETTERS', 'SIZE' 'DESCRIPTION', 'LOCATION'
- writer.writerow(header)
- for chip in chips:
- writer.writerow(chip.as_tuple())
- def chips_by_letter(chips):
- by_letter = {letter: [] for letter in ascii_uppercase}
- by_letter['*'] = []
- for chip in chips:
- for letter in chip.letters:
- by_letter[letter].append(chip)
- return by_letter
- if __name__ == '__main__':
- chips = tuple(generate_chips(input_filename))
- by_letter = chips_by_letter(chips)
- write_to_csv(output_filename, chips)
- for letter in by_letter:
- chip_names = tuple(chip.name for chip in by_letter[letter])
- print(letter, ': ', chip_names)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement