# =============================================================================
# Modifictionsにある、(1)記述、(2)ぺプチド番号、(3)アミノ酸番号を分解して、エクセルにこれらの列を追加する。
# =============================================================================
import os
import datetime
import pandas as pd
import re
from openpyxl import load_workbook
from openpyxl.styles import Font
from openpyxl.styles.alignment import Alignment
# 配列入力
seq = 'ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0ABCDEFGHIJKLMNOPQRS0'
# 元になるエクセルファイルを読み込み
#xlsB1 = input('Excel file to be processed ,as ###.xlsx:')
xlsB1 = 'bpv_deami_oxid'
xlsB2 = str(xlsB1) + '.xlsx'
# sheet1を指定して、データフレームに読み込む
df = pd.read_excel(xlsB2, sheet_name='Sheet1')
# dfの中を表示する
print('')
print('--- dataframe ---')
print(df)
# Modificationに記された、(1)記述, (2)ペプチド番号、(3)アミノ酸番号に分解する。
df2 = df['Modifications1']
print(df2)
Aaa = [] #Deamidated / Oxidation / ...
PPn = [] #ペプチド番号
An = [] #アミノ酸番号
AAn = [] #アミノ酸表記
BBB1 = [] #Modificationを分解したリスト
for i, AAA in enumerate(df2):
BBB1 = re.split('[\xa0@()]',AAA)
#----------
if len(BBB1) >=1:
Aaa.append(BBB1[0])
else:
Aaa.append('9999') #空欄のときは、9999 を割り当てる
#----------
if len(BBB1) >=2:
PPn.append(BBB1[1])
else:
PPn.append('9999') #空欄のときは、9999 を割り当てる
#----------
if len(BBB1) >=3:
AAn.append(BBB1[2])
else:
AAn.append('9999') #空欄のときは、9999 を割り当てる
#----------
if len(BBB1) >=3:
if (BBB1[2] == '') or (BBB1[2] == '*'):
An1 = 'X' #空欄のときは、X を割り当てる
else:
print(BBB1[2])
An1 = seq[int(BBB1[2])]#文字列の要素にアクセスしようとした際に、その要素が存在しない場合に発生するエラーです。
An.append(An1)
else:
An1 = 'X' #BBB1の表記が足らないで、割り当てられていないときは、アミノ酸 X を割り当てる
An.append(An1)
df['Modifications_Aaa'] = Aaa
df['Modifications_PPn'] = PPn
df['Modifications_AAn'] = AAn
df['Modifications_An'] = An
# =============================================================================
# 日付を得て、ディレクトリにフォルダを作成して、結果を保存
# =============================================================================
# 日付取得/ファイル名のため
d_today = str(datetime.date.today())
# ディレクトリにフォルダ作成
dirname = d_today+'_'+xlsB1+'/'
if not os.path.exists(dirname):
os.mkdir(dirname)
# エクセルとして保存
filename2 = dirname + xlsB1 +'.xlsx'
df.to_excel(filename2)
# =============================================================================
# エクセルの書式設定
# =============================================================================
wb = load_workbook(filename2)
ws = wb.active
# set font
font = Font(name='Calibri', size=9)
# write in sheet
for row in ws:
for cell in row:
ws[cell.coordinate].font = font
# alignment #【エクセル】タイトル行だけ左寄せ
for row in ws['A1:AZ1']:
for cell in row:
cell.alignment = Alignment(horizontal='left')
#filename2 = dirname + xlsB1 +'.xlsx'
wb.save(filename2)
# コードの終わり