Konverze vmsg do csv

Převod souboru VMSG do CSV

Extrahujte SMS záznamy ze záloh VMSG do prohledávatelných souborů CSV kompatibilních s tabulkovými procesory.

Vytvořte soubory CSV online

Soubory VMSG zatím číst neumíme, takže tenhle převod nenabízíme. Pokud dokážete svou práci uložit do některého z těchto formátů nebo dalších, CSV z něj vyrobíme:

Jak převést soubor vmsg do formátu csv

Starší záloha telefonu nebo nástroj pro zasílání zpráv může exportovat záznamy SMS jako .vmsg, zatímco tabulkové procesory, databáze a nástroje pro vytváření sestav obvykle vyžadují .csv. Převod změní záznamy zpráv na řádky, které lze vyhledávat, filtrovat, upravovat nebo importovat.

Co je formát VMSG

VMSG, také označovaný jako vMessage, je textový formát používaný staršími mobilními telefony, softwarem pro správu telefonů a nástroji pro zálohování SMS. Soubor běžně obsahuje části BEGIN:VMSG, BEGIN:VENV a BEGIN:VBODY s vlastnostmi, jako jsou TEL, DTSTART, SUBJECT, BODY, X-IRMC-BODY, X-IRMC-TYPE a X-IRMC-BOX.

VMSG je čitelný jako prostý text, ale jeho vnořené záznamy a vlastnosti specifické pro konkrétního dodavatele se automaticky nezobrazují jako řádky a sloupce. Některé soubory ukládají telefonní číslo v okolní části VCARD, nikoli uvnitř těla zprávy.

Co je formát CSV

CSV představuje tabulková data jako řádky a pole. Podporují ho Excel, LibreOffice Calc, Google Sheets, nástroje pro import do databází i většina knihoven pro skriptování. Export zpráv běžně používá sloupce jako date, phone, type, folder, subject a body.

CSV je užitečný pro řazení podle data, filtrování příchozích a odchozích zpráv, vyhledávání v textu zpráv, import záznamů do jiného systému a vytvoření kompaktního textového archivu. Nezachovává syntaxi VMSG, přílohy, stavy doručení ani metadata specifická pro dodavatele, pokud nejsou tyto hodnoty explicitně exportovány do dalších sloupců.

Převeďte soubor pomocí lokálního skriptu

Neexistuje univerzální standardní implementace VMSG: výrobci telefonů a zálohovací programy používají různé názvy vlastností a kódování. Malý lokální parser v Pythonu je obvykle bezpečnější než nahrávání soukromých zpráv na obecný web pro převod.

Nainstalujte Python 3, uložte následující kód jako vmsg_to_csv.py a umístěte ho vedle zdrojového souboru:

import csv
import sys
import quopri


def decode(value, params):
    if any(p.upper() == 'ENCODING=QUOTED-PRINTABLE' for p in params):
        value = quopri.decodestring(value).decode('utf-8', errors='replace')
    slash = chr(92)
    return (value.replace(slash + 'n', '\n')
                 .replace(slash + 'N', '\n')
                 .replace(slash + ',', ',')
                 .replace(slash + ';', ';')
                 .replace(slash + slash, slash))


def convert(source, destination):
    rows = []
    record = None
    contact_tel = ''
    in_vcard = False

    with open(source, encoding='utf-8-sig', errors='replace') as handle:
        lines = []
        for raw in handle:
            line = raw.rstrip('\r\n')
            if line.startswith((' ', '\t')) and lines:
                lines[-1] += line[1:]
            else:
                lines.append(line)

    for line in lines:
        upper = line.upper()
        if upper == 'BEGIN:VCARD':
            in_vcard = True
            continue
        if upper == 'END:VCARD':
            in_vcard = False
            continue
        if upper == 'BEGIN:VBODY':
            record = {}
            continue
        if upper == 'END:VBODY':
            if record is not None:
                record['_CONTACT_TEL'] = contact_tel
                rows.append(record)
            record = None
            continue
        if ':' not in line:
            continue
        left, value = line.split(':', 1)
        parts = left.split(';')
        name = parts[0].upper()
        value = decode(value, parts[1:])
        if in_vcard and name == 'TEL':
            contact_tel = value
        elif record is not None:
            record[name] = value

    def first(row, names):
        for name in names:
            if row.get(name, ''):
                return row[name]
        return ''

    columns = ['date', 'phone', 'type', 'folder', 'subject', 'body']
    with open(destination, 'w', newline='', encoding='utf-8-sig') as handle:
        writer = csv.DictWriter(handle, fieldnames=columns)
        writer.writeheader()
        for row in rows:
            writer.writerow({
                'date': first(row, ['DTSTART', 'DATE']),
                'phone': first(row, ['TEL', 'X-IRMC-RECIPIENT', 'TO', 'FROM', '_CONTACT_TEL']),
                'type': first(row, ['X-IRMC-TYPE', 'TYPE']),
                'folder': first(row, ['X-IRMC-BOX', 'FOLDER']),
                'subject': first(row, ['SUBJECT']),
                'body': first(row, ['BODY', 'X-IRMC-BODY', 'TEXT', 'MESSAGE'])
            })


if len(sys.argv) != 3:
    raise SystemExit('Usage: python vmsg_to_csv.py input.vmsg output.csv')
convert(sys.argv[1], sys.argv[2])

Spusťte python vmsg_to_csv.py messages.vmsg messages.csv. V systémech, které používají příkaz python3, spusťte python3 vmsg_to_csv.py messages.vmsg messages.csv. Výsledek otevřete v Calc nebo Excelu; značka pořadí bajtů UTF-8 pomáhá tabulkovému procesoru rozpoznat znaky mimo ASCII.

Před převodem otevřete kopii souboru VMSG v textovém editoru a zkontrolujte skutečné názvy jeho vlastností. Skript rozpoznává běžné aliasy včetně BODY, X-IRMC-BODY, TEXT a MESSAGE. Pokud zprávy používají jiný název, přidejte ho do seznamu těla ve skriptu. Pokud soubor používá jinou než UTF-8 znakovou sadu, změňte vstupní kódování a před zpracováním celé zálohy otestujte znaky s diakritikou.

Další možnosti převodu

Specializovaný nástroj, například vmsg2csv, může fungovat pro konkrétní variantu zálohy telefonu, ale nejprve ověřte jeho zdroj, podporované vlastnosti a výstup na malé kopii. Dostupnost a kompatibilita starších nástrojů se liší a mnohé z nich správně nedekódují quoted-printable text, zalomené řádky nebo pole specifická pro dodavatele.

LibreOffice Calc a Excel dokážou otevřít CSV, ale nejsou spolehlivými parsery VMSG. Import souboru VMSG prostřednictvím File → Open funguje pouze poté, co byly záznamy již normalizovány do řádků oddělených oddělovači.

Obecné online převodníky jen zřídka uvádějí VMSG jako podporovaný vstup a mohou nesprávně interpretovat jeho vnořenou strukturu. Online službu použijte pouze v případě, že výslovně podporuje VMSG, vysvětluje pravidla uchovávání a mazání dat, používá HTTPS a nevyžaduje zbytečný přístup k účtu. Nenahrávejte zálohy SMS obsahující soukromé zprávy, telefonní čísla nebo ověřovací kódy, pokud je s tím spojené riziko pro soukromí nepřijatelné.

Kontrola převedených dat

Porovnejte několik řádků CSV se zdrojovým souborem, včetně zpráv obsahujících čárky, zalomení řádků, uvozovky, znaky mimo ASCII a prázdná těla. Pythoní zapisovač CSV správně uzavírá čárky a vložená zalomení řádků do uvozovek, ale telefonní program může víceřádkový nebo quoted-printable obsah ukládat ve formě specifické pro dodavatele, která vyžaduje další dekódování.

Původní soubor VMSG si ponechte. CSV je zploštěný výměnný formát a může vynechat přílohy, stav přečtení nebo doručení, strukturu kontaktů, časová razítka s informacemi o časovém pásmu a pole, která nebyla zahrnuta do vybraných výstupních sloupců.

Podobné .vmsg konverze

Konverze do .csv
z jiných formátů

Sdílejte na sociálních sítích: