freelsn / notes

0 stars 0 forks source link

test csv #6

Open freelsn opened 1 year ago

freelsn commented 1 year ago
from collections import defaultdict
import re
import pandas as pd

def extract_value_by_key(name, key):
    pattern = rf'[:\s]*{key}=([\w\d\_]+)'
    ret = re.search(pattern, name)
    if ret:
        value = ret.group(1)
    else:
        value = None
    return value

def process_line_and_save_to_db(line, db):

    basic_items = [
        'Site', 'Product', 'SerialNumber', 'Station ID', 
        'Version', 'StartTime', 'EndTime',
    ]

    test_items = [
        'tc', 'subtc', 'subsubtc',
        'tech', 'subtech',
        'ant', 'rate', 'freq', 'pwr',
        'stream', 'nyqg',
    ]

    def append_basic_items():
        for name in basic_items:
            db[name].append(line[name])

    def extract_item_and_add_to_db(test_name):
        for item_name in test_items:
            value = extract_value_by_key(test_name, item_name)
            db[item_name].append(value)

    for name, value in line.items():
        if name.startswith('tc='):
            append_basic_items()
            extract_item_and_add_to_db(name)
            db['value'].append(value)

def process_table(df):
    db = defaultdict(list)
    for _, line in df.iloc[5:].iterrows():
        process_line_and_save_to_db(line, db)
    return db

src_fname = 'CSV_test name key extract_123.csv'
src_df = pd.read_csv(src_fname, skiprows=1)
db = process_table(src_df)
df = pd.DataFrame.from_dict(db)
df.to_csv('test_csv_cleaned.csv', index=False)