Python script to merge multiple vCard (.vcf) files into one.

#!/usr/bin/env python3
import os
import sys

# Check if the directory is provided as a command line argument
if len(sys.argv) != 2:
    print("Usage: python merge_vcf.py <directory>")
    sys.exit(1)

# Get the directory from the command line argument
directory = sys.argv[1]

# Check if the provided argument is a valid directory
if not os.path.isdir(directory):
    print(f"{directory} is not a valid directory.")
    sys.exit(1)

# Set the output file name to the directory name plus ".vcf"
output_file = os.path.basename(os.path.normpath(directory)) + '.vcf'
output_file_path = output_file

# Check if the output file already exists
if os.path.exists(output_file_path):
    print(f"{output_file_path} already exists. Exiting...")
else:
    # Get a list of all .vcf files in the specified directory
    vcf_files = [file for file in os.listdir(directory) if file.endswith('.vcf') and file != output_file]

    # Open the output file in write mode
    with open(output_file_path, 'w', encoding="utf-8") as outfile:
        # Loop through each vcf file and append its contents to the output file
        for vcf in vcf_files:
            with open(os.path.join(directory, vcf), 'r', encoding="utf-8") as infile:
                try:
                    outfile.write(infile.read())
                    # Ensure there's a new line between different vCard files
                    outfile.write('\n')
                except UnicodeEncodeError:
                    print("Encode error while processing", vcf)

    print(f"All vCard files have been merged into {output_file_path}")