はじめに
前回作成した「CeVIO AIのインポートファイルの作成」を修正します。
1タイトルで1ファイルで作成しましたが、1タイトルの行数が少ない物もありますので、
インポート作業が大変でしたので、1ファイルを900行(最大行数)で作成できるように
修正しました。
修正内容
Cevio AIの仕様が一回のインポートが最大1000行となります。
また、一行の文字数が最大200文字となりますので、
今回は、最大値の1割程度余裕を持ち、最大で900行のファイルを作成します。
また、単純にファイルをつなげると意味が分からなくなりますので、
前回のファイル名をそのまま、タイトルとしてファイルに書き込みするようにしました。
ソース
import pandas as pd
import re
def main():
"""メイン処理"""
#csvファイルの読み込み
file_name=".\\isekainiotosareta.csv" #ファイルのパスを記載する
#出力ファイルのディレクトリパスを記載する
out_dir = ".\\out_dir"
try:
#CSVファイルの読み込み
df_file = pd.read_csv(file_name)
except IOError as e:
print("ioerr:",e)
return -1
else:
#index値を取得する
df_size = df_file.index.stop
#print(df_size)
#一タイトルごとに取得する
s_list=[] #1ファイルの書き込みリストを初期化する
max_size = 900
index_name=0
for idx in range(df_size):
#タイトルを取得する
str_title = df_file.loc[idx,'title']
#内容を取得する
str_text = df_file.loc[idx,'text']
#リストに変更する
str_list = str_text.split("\n")
#空行を飛ばすため、詰めなおす。
str_title_idx="タイトル:"+str(idx)+"_"+str_title
s_list_temp=[]
ss_title =str_title_idx.encode('cp932', "ignore")
s_list_temp.append(ss_title)
for ss in str_list:
#空は飛ばす
if(ss != ''):
#ファイルに書き込む時に改行を入れたいのでここで入れる
ssb=ss+"\n"
#cevio aiがshift-jisなのでUTF-8から返還する
#この時に変換失敗した場合は失敗した文字を飛ばす。
ss_sji =ssb.encode('cp932', "ignore")
s_list_temp.append(ss_sji)
list_size = (len(s_list)+len(s_list_temp))
if(max_size<list_size):
#900行を超えるようなら書き込みを行う
try:
s_title = "{:04d}".format(index_name)
f = open(out_dir+'\\'+s_title+'.txt', 'wb')
f.writelines(s_list)
f.close()
s_list=[]
s_list=s_list_temp
index_name=index_name+1
except IOError as e:
print("ioerr:",e)
return -1
else:
s_list=s_list+s_list_temp
#print(len(s_list))
print(len(s_list))
try:
print(len(s_list))
s_title = "{:04d}".format(index_name)
print(s_title)
f = open(out_dir+'\\'+s_title+'.txt', 'wb')
f.writelines(s_list)
f.close()
s_list=[]
except IOError as e:
print("ioerr:",e)
return -1
if __name__ == '__main__':
main()
最後に
他にも改造できそうな箇所があれば更新します。
コメント
Great article.
ありがとうございます