pythonpicklegedcom

Writing Data to File then Moving to Desktop


I'm sure this is really simple but I can't figure out how to make a parsed result into its own file then move it to my desktop using python. Here is my code so far. I just want to save the result "names" as its own file then move it to my desktop but I can't find the answer anywhere. Is this an uncommon practice?

from gedcom.element.individual import IndividualElement
from gedcom.parser import Parser
import os
import shutil
import pickle


# Path to your `.ged` file
file_path = '/Users/Justin/Desktop/Lienhard_Line.ged'

# Initialize the parser
gedcom_parser = Parser()

# Parse your file
gedcom_parser.parse_file(file_path, False)

root_child_elements = gedcom_parser.get_root_child_elements()

# Iterate through all root child elements
for element in root_child_elements:

    # Is the `element` an actual `IndividualElement`? (Allows usage of extra functions such as `surname_match` and `get_name`.)
    if isinstance(element, IndividualElement):

        # Get all individuals whose surname matches "Doe"
        if element.surname_match('Lienhard'):

            # Unpack the name tuple
            (first, last) = element.get_name()
            names = (first + " " + last)
            
            pickle.dumps(names)

Solution

  • Saving a file to one location and then moving it is to another not how it's usually done, no. Just save to the final location.

    from pathlib import Path
    
    pic = Path.home() / 'Desktop' / 'names.pickle'
    with pic.open('w') as picklefile:
        pickle.dump(names, picklefile)
    

    The pathlib library makes working with file names somewhat easier than the old os.path API, though both are in common use.

    Writing and then renaming has some uses; if you need to absolutely make sure your data is saved somewhere, saving it to a temporary file until it can be renamed to its final name is a fairly common technique. But in this case, saving to a different location first seems like it would only introduce brittleness.

    The above assumes that you have a directory named Desktop in your home directory, as is commonly the default on beginner-oriented systems. To be perfectly robust, the code should create the directory if it doesn't already exist, or perhaps simply save to your home directory.

    Indeed, a much better convention for most purposes is simply to always save in the current directory, and let the user take it from there. Hardcoding paths in another directory just adds confusion and uncertainty.

    with open('names.pickle', 'w') as picklefile:
        pickle.dump(names, picklefile)
    

    This code creates a file called names.pickle in the invoking user's current working directory. The operating system provides the concept of a current working directory for precisely this purpose. Perhaps see also Difference between ./ and ~/ if you need more details about how this works.