質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

874閲覧

テキストファイルから2列のcsvファイルを生成する方法

green2021

総合スコア16

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2022/04/06 09:00

前提

Pythonにおいて、カンマで区切られたテキストファイルから、2列のcsvファイルを生成しようとしていますが、1列のcsvファイルになってしまいます。

実現したいこと

以下の手順で、2列のcsvファイルを生成したいと思います。
①カンマで区切られたテキストファイルを読み込む。
②余計な文字を取り除き、配列にテキストファイルを加える。
③配列をそのままcsvファイルに変換してしまうと、1文字ずつの挿入になってしまうので、二次元配列に入れる。
④ ③をsklearnのtrain_test_splitで、データを分割(最終的に機械学習用のデータとして使用するため)し、出力。

しかし、出力されたcsvの先頭と末尾にダブルクォーテーションがついているためなのか、1列のcsvになってしまいます。

発生している問題・エラーメッセージ

出力されたcsvは以下のようになります。(列が長くなるため、テストデータのみ記載) 1列のcsvファイルになってしまいます。 # cli_test.csv "静岡と言ったらお茶,3" "インフルエンザの予防接種を受けた。,2" "ハワイは日本人が多い,5" "お風呂に入る。,4" "睡眠はきちんととった。,4"

該当のソースコード

python

1# coding: shift_jis 2 3import csv 4import numpy as np 5from sklearn.model_selection import train_test_split 6 7sentences = [] 8 9with open('test_data.txt') as f: 10 sample_txt = f.readlines() 11 12for s in sample_txt: 13 text = s.translate(str.maketrans({"\u3000":"","\n":""})) 14 sentences.append(text) 15 16# 二次元は配列に入れないと、csvファイルに出力するとき、各セルに一文字ずつ出力されてしまう。 17sentences_column = len(sentences) 18new_sentence = np.array(sentences).reshape(sentences_column,1) 19 20# sklearnのtrain_test_splitで、データを分割 21news_train, news_test = train_test_split(new_sentence, shuffle=True) # 訓練用とテスト用に分割 22# 何も指定していない場合は、25%がテストデータ 23news_path = "./test_data/" 24# csvファイルを保存するパス 25 26with open(news_path+"cli_train.csv", "w" ,encoding="utf-8" ,newline='') as f: 27 writer = csv.writer(f) 28 writer.writerows(news_train) 29 # 訓練データを"news_train.csv"に保存 30 31with open(news_path+"cli_test.csv", "w" ,encoding="utf-8",newline='') as f: 32 writer = csv.writer(f) 33 writer.writerows(news_test) 34 # テストデータを"news_test.csv"に保存 35 36#test_data.txt 37カレーを食べた。,1 38インフルエンザの予防接種を受けた。,2 39あなたに渡す。,3 40お風呂に入る。,4 41太郎の靴だ,5 42ビタミン剤を買う,1 43川で泳ぐ,1 44阿蘇山が噴火した。,3 45チョコレートとクッキーだ,5 46人気者の姉,5 47ハワイは日本人が多い,5 48新型の携帯電話を買う,2 49お酒が好きだ。,2 50トムの妹はサリーだ。,2 51静岡と言ったらお茶,3 52飛行機で九州に行く。,3 53睡眠はきちんととった。,4 54数学が得意だ,1 55半角 スペース,1 56全角 スペース,2

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

そもそもsentencesが二次元配列になっていないようなので、
text = s.translate(str.maketrans({"\u3000":"","\n":""}))
text = s.translate(str.maketrans({"\u3000":"","\n":""})) .split(",")
としてみてはいかがですか。

あるいは、

python3

1with open('test_data.txt') as f: 2 sample_txt = f.readlines() 3 4for s in sample_txt: 5 text = s.translate(str.maketrans({"\u3000":"","\n":""})) 6 sentences.append(text)

のところを

python3

1with open('test_data.txt') as f: 2 reader = csv.reader(f) 3 sentences = list() 4 for row in reader: 5 row[0] = row[0].replace("\u3000", "") 6 sentences.append(row)

としてしまうか。

投稿2022/04/07 00:33

編集2022/04/07 00:39
jeanbiego

総合スコア3966

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

green2021

2022/04/07 03:53

返信ありがとうございます。 with open('test_data.txt') as f: reader = csv.reader(f) sentences = list() for row in reader: row[0] = row[0].replace("\u3000", "") sentences.append(row) 上記の、コードを実装してみたら、「ValueError: cannot reshape array of size 40 into shape (20,1)」と 出力されました。 また、 text = s.translate(str.maketrans({"\u3000":"","\n":""})) .split(",") 上記を実装してみても、同様のエラーが出ます。 ご確認よろしくお願い致します。
jeanbiego

2022/04/07 04:00

# 二次元は配列に入れないと、csvファイルに出力するとき、各セルに一文字ずつ出力されてしまう。 sentences_column = len(sentences) new_sentence = np.array(sentences).reshape(sentences_column,1) # sklearnのtrain_test_splitで、データを分割 news_train, news_test = train_test_split(new_sentence, shuffle=True) # 訓練用とテスト用に分割 上記は、20×2の二次元配列を無理やり20×1にしようとしてますね。 下記のようにリストをそのまま入れるだけで良いかと。 news_train, news_test = train_test_split(sentences, shuffle=True) # 訓練用とテスト用に分割
jeanbiego

2022/04/07 04:02

つまりは目的と違う形(1次元)だからこそ動作していたコードになっていました。 途中途中で変数の形が設計通りかどうか、確認した方が良いですよ。
green2021

2022/04/08 00:18

わざわざ、丁寧な返信も頂きありがとうございます。 無事に目的を果たせました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問