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

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

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

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

3回答

6727閲覧

txtファイルを分割したい

momochi

総合スコア68

Python 3.x

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

1グッド

1クリップ

投稿2017/05/15 11:36

編集2017/05/15 12:34

###前提・実現したいこと
iris_data.txtの中身を前半4つと最後の1つのファイルに分割したい。
分割後はcsvファイルに出力したいです。
一応、自分で書けたのですが冗長になったような気がしまして、よりきれいに書けるところがあれば教えてください。

【追記】
途中numpyに変えているのは気にしないでください。別に直さなくてもできて、消すのを忘れていただけです。

iris_data.txt 5.1,3.5,1.4,0.2,Iris-setosa 4.9,3.0,1.4,0.2,Iris-setosa 4.7,3.2,1.3,0.2,Iris-setosa 4.6,3.1,1.5,0.2,Iris-setosa 5.0,3.6,1.4,0.2,Iris-setosa 5.4,3.9,1.7,0.4,Iris-setosa 4.6,3.4,1.4,0.3,Iris-setosa 5.0,3.4,1.5,0.2,Iris-setosa 4.4,2.9,1.4,0.2,Iris-setosa 4.9,3.1,1.5,0.1,Iris-setosa ... ... .. 5.0,2.3,3.3,1.0,Iris-versicolor 5.6,2.7,4.2,1.3,Iris-versicolor 5.7,3.0,4.2,1.2,Iris-versicolor 5.7,2.9,4.2,1.3,Iris-versicolor 6.2,2.9,4.3,1.3,Iris-versicolor 5.1,2.5,3.0,1.1,Iris-versicolor 5.7,2.8,4.1,1.3,Iris-versicolor
iris_data_train.csv 5.1,3.5,1.4,0.2 4.9,3.0,1.4,0.2 4.7,3.2,1.3,0.2 4.6,3.1,1.5,0.2 5.0,3.6,1.4,0.2 5.4,3.9,1.7,0.4 4.6,3.4,1.4,0.3 5.0,3.4,1.5,0.2 ... ... ..
iris_target_train.csv Iris-setosa Iris-setosa Iris-setosa Iris-setosa Iris-setosa Iris-setosa Iris-setosa Iris-setosa ... ... ..

###該当のソースコード

python

1import csv 2import numpy as np 3 4f = open('iris_data.txt') 5list1=[] 6#list1=['5.1,3.5,1.4,0.2,Iris-setosa\n',...,'5.7,2.8,4.1,1.3,Iris-versicolor'] 7for row in f: 8 list1.append(row) 9f.close() 10#print(list1) 11#print(type(list[0])) 12#print(list) 13list2=[] 14#list2=list1から改行コード除去 15for line in list1: 16 line1 = line.replace('\n','') 17 list2.append(line1) 18list3=[data.split(',')for data in list2] 19#list3=[['5.1', '3.5', '1.4', '0.2', 'Iris-setosa'],...,['5.7', '2.8', '4.1', '1.3', 'Iris-versicolor']] 20#print (type(list3[0][0])) 21 22list4=[[[a,b,c,d],[e]] for a,b,c,d,e in list3] 23data_list,target_list=[data for data,target in list4],[target for data,target in list4] 24 25#print(data_list) 26#print(target_list) 27 28numpy1=np.array(data_list) 29numpy2=numpy1.astype(np.float64) 30print(numpy2) 31 32f = open('iris_data_train.csv', 'w', newline='') 33csvWriter = csv.writer(f) 34[csvWriter.writerow(a) for a in data_list] 35f.close() 36 37f = open('iris_target_train.csv', 'w', newline='') 38csvWriter = csv.writer(f) 39[csvWriter.writerow(a) for a in target_list] 40f.close()
退会済みユーザー👍を押しています

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2017/05/15 13:55

要するに、数字部分と文字部分を分ければ良いのですか?
momochi

2017/05/15 14:05

その通りです
guest

回答3

0

ベストアンサー

pandasを使っていいなら。
やりたいことは irisデータセットを特微とラベルに分割したいんですよね?

python

1# -*- coding: utf-8 -*- 2import pandas as pd 3 4 5def main(): 6 df = pd.read_csv('iris_data.txt', header=None) 7 df.to_csv('iris_data_train.csv', header=False, index=False, columns=range(0, 4)) 8 df.to_csv('iris_target_train.csv', header=False, index=False, columns=range(4, 5)) 9 10if __name__ == '__main__': 11 main()

■参考情報
pandas.read_csv
pandas.to_csv

投稿2017/05/15 13:59

編集2017/05/15 14:01
umyu

総合スコア5846

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

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

momochi

2017/05/15 14:36

pandsは本などで見かけた事があったのですが、そんな便利なことがてきるのですね! 勉強してみます
guest

0

シェル芸になってしまいますが回答します。結論から言えば以下のコマンドで実現可能です。

cat iris_data.txt|cut -c 1-15 > iris_data_train.csv cat iris_data.txt|cut -c 17- > iris_target_train.csv

一応解説をしますと、まずcatコマンドでiris_data.txtを出力して、cutコマンドで1〜15文字目を出力しています。さらにそれをリダイレクトでファイルに保存しています。
二行目も同じく、17文字目から最後までを出力しています。

あくまでこれは即席であり文字数にも依存しているので、よければシェル芸を勉強してこれから役立てていってみてください。

投稿2017/05/15 14:12

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

momochi

2017/05/15 14:41

シェルも便利ですね! ありがとうございます
退会済みユーザー

退会済みユーザー

2017/05/16 14:05

b
guest

0

お邪魔します。

読みにくくてあんまり良いプログラムではないですが、参考までに。
for文に渡しているジェネレータ内包表記のネストは分けたほうが良かったかもです。

python

1list1 = [] 2with open('iris_data.txt') as f: 3 list1 = f.readlines() 4 5with open('iris_data_train.csv', 'w') as f1, open('iris_target_train.csv', 'w') as f2: 6 for before, after in ((col[:4], col[4]) for col in (line.strip().split(',') for line in list1)): 7 f1.write(",".join(before) + "\n") 8 f2.write(after + "\n")

投稿2017/05/15 14:03

ShinpeiYamamoto

総合スコア540

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問