# Check if input file exists if not os.path.exists(args.input): print(f"Error: Input file 'args.input' not found") return 1
def read_csv(self, file_path: str, encoding: Optional[str] = None) -> List[Dict]: """Read CSV file and return list of dictionaries""" if not encoding: encoding = self.detect_encoding(file_path) print(f"Detected encoding: encoding") contacts = [] try: with open(file_path, 'r', encoding=encoding) as f: # Detect delimiter sample = f.read(1024) f.seek(0) delimiter = self.detect_delimiter(sample) print(f"Detected delimiter: delimiter") reader = csv.DictReader(f, delimiter=delimiter) # Normalize column names reader.fieldnames = [self.normalize_column_name(col) for col in reader.fieldnames] for row_num, row in enumerate(reader, start=2): contact = self.normalize_contact(row) if contact.get('name') or contact.get('phone'): contacts.append(contact) else: print(f"Warning: Row row_num skipped - missing name or phone") except Exception as e: raise Exception(f"Error reading CSV file: str(e)") return contacts csv to vcf
args = parser.parse_args()
def detect_delimiter(self, sample: str) -> str: """Detect CSV delimiter (comma, semicolon, or tab)""" common_delimiters = [',', ';', '\t', '|'] delimiter_counts = {} for delimiter in common_delimiters: if delimiter in sample: # Count occurrences in first line first_line = sample.split('\n')[0] delimiter_counts[delimiter] = first_line.count(delimiter) if delimiter_counts: return max(delimiter_counts, key=delimiter_counts.get) return ',' # Default to comma # Check if input file exists if not os