Use pandas:
import pandas as pd
print pd.read_csv('test.csv',sep='|')
out:
A B C D x F G x.1 H
0 1 NaN 2 NaN 3 4 NaN 5 6
1 1 NaN 2 NaN 3 4 NaN 5 6
2 1 NaN 2 NaN 3 4 NaN 5 6
3 1 NaN 2 NaN 3 4 NaN 5 6
and if you need you can convert it to a dict using to_dict()
method:
{'A': {0: 1, 1: 1, 2: 1, 3: 1},
'B': {0: nan, 1: nan, 2: nan, 3: nan},
'C': {0: 2, 1: 2, 2: 2, 3: 2},
'D': {0: nan, 1: nan, 2: nan, 3: nan},
'F': {0: 4, 1: 4, 2: 4, 3: 4},
'G': {0: nan, 1: nan, 2: nan, 3: nan},
'H': {0: 6, 1: 6, 2: 6, 3: 6},
'x': {0: 3, 1: 3, 2: 3, 3: 3},
'x.1': {0: 5, 1: 5, 2: 5, 3: 5}}
EDIT: If you need certain names for columns you can do this:
import pandas as pd
df = pd.read_csv('test.csv',sep='|')
df.columns = [df.columns[index-1]+'x' if 'x' in name
else name for index,name in enumerate(df.columns)]
print df
A B C D Dx F G Gx H
0 1 NaN 2 NaN 3 4 NaN 5 6
1 1 NaN 2 NaN 3 4 NaN 5 6
2 1 NaN 2 NaN 3 4 NaN 5 6
3 1 NaN 2 NaN 3 4 NaN 5 6
If you want to lose the empty cols:
print df.dropna(axis=1,how='all')
A C Dx F Gx H
0 1 2 3 4 5 6
1 1 2 3 4 5 6
2 1 2 3 4 5 6
3 1 2 3 4 5 6