解決したいこと
以下のようなCSVファイルを読みこんでリスト化したい
"氏名" | "国語" | "数学" | "英語" | .... |
---|---|---|---|---|
"K.U" | "100" | "90" | ... | |
"K.T" | "50\r\n50" | "90" | .... | |
. | . | . | . | . |
. | . | . | . | . |
上記のファイルを文字列で受け取ると以下になります
”氏名","国語","数学","英語"\r\n""K.U","100", ,"90"\r\n"K.T", ,"50\r\n50","90"
受け取った文字列を以下のようなリストにしたいです
#[[”氏名","国語","数学","英語"],["K.U","100",,"90"],["K.T",,"50\r\n50","90"]]
不明な点
re.split(',|\r\n',bodystr)を用いると"50\r\n50"箇所の改行でも区切られおかしくなてしまう
個々の部分を回避して上記のリストにする方法を教えていただきたいです。
行と列が増えてもプログラムの修正が必要ないように(colsで指定せず)作成したいです。
調べたこと
正規表現[("[^"]")(?=,||$)]で""で囲われた部分をマッチさせるなど使用すると、空白の欄も飛ばされてしまいます。
lines = re.findall('("[^"]"),bodystr)
python
1import boto3 2import re 3def data_convert(bodystr): 4 cols = 4 5 lines = re.split(',|\r\n',bodystr) 6 return [lines[i:i+cols] for i in range(0, len(lines),cols)] 7 8s3_client = boto3.client('s3') 9res = s3_client.get_object(Bucket=data_target_bucket, Key=temp_notpass_file) 10body = res['Body'].read() 11bodystr = body.decode('Shift-JIS') 12print(bodystr) 13#”氏名","国語","数学","英語"\r\n"K.U","100", ,"90"\r\n"K.T", ,"50\r\n50","90" 14 15tmp_l = data_convert(tmp_bodystr,61) 16print(tmp_l) 17
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。