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)