🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python

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

Q&A

解決済

2回答

1305閲覧

Pythonで空白で区切れない

itsuko

総合スコア17

Python

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

0グッド

0クリップ

投稿2020/12/20 05:20

前提・実現したいこと

Pythonでテキストファイルの各行を読み込み、excelへ書き込みたいです。
test.datの7行目は
「 5.0 7.127362210 7.240419247」
というデータです(カギカッコは実際はありません。5.0の前の空白はあります)・
これを、5.0、7.12...、7.24...の3つのデータに分けたいです。

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

.stripで空白で分割して格納したいけど、うまく分割できません。strip(' ')をつけても、5.0の前の空白は消えますが、数字と数字の間の空白は消えません。また、excelの(1,1)(2,2)(3,3)にそれぞれ入れようとしたら、 (1,1)=5 (2,2)=. (3,3)=0 となってしまいます。理想は、 (1,1)=5.0 (2,2)=7.127362210 (3,3)=7.240419247 です。

該当のソースコード

Python

1path = "C:...test.dat" 2f = open(path) 3datalist = f.readlines() 4data = datalist[7].strip(' ') 5f.close() 6 7 8# EXCEL操作 9import openpyxl 10import pprint 11wb = openpyxl.load_workbook('C:...data.xlsx') 12sheet = wb.worksheets[0] 13sheet.cell(row=1, column=1).value = data[0] 14sheet.cell(row=2, column=2).value = data[1] 15sheet.cell(row=3, column=3).value = data[2] 16wb.save('C:...data.xlsx') 17print('ok') 18wb.close()

試したこと

strip関数を上記説明にあるやり方で試しました

補足情報(FW/ツールのバージョンなど)

Python3です。datファイルは普通のテキストファイルです。普段はnotepadで開いてます。

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

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

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

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

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

guest

回答2

0

文字列を特定の文字列(空白等)で分割するのは、.split です。
.stripは指定した文字を削除します。

data = datalist[7].strip(' ')

で、dataに"5.07.1273622107.240419247"という文字列が入りますから、data[0]が"5",data[1]が".",data[2]が"0"になります。

data = datalist[7].split(' ')

data = datalist[7].strip()

にしてください。

投稿2020/12/20 05:33

編集2020/12/20 05:34
fumu7

総合スコア121

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

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

LouiS0616

2020/12/20 05:42 編集

> .stripは指定した文字を削除します。 それはreplaceの役割です。stripは文字列の両側から指定された文字(複数指定可)を削ります。 例えば 'abcabca'.strip('a') ⇒ 'bcabc' であり、'abcabca'.replace('a', '') ⇒ 'bcbc' です。 また 'abcabca'.strip('ca') ⇒ 'bcab'、'abcabca'.replace('ca', '') ⇒ 'abb' なのも面白い挙動です。
itsuko

2020/12/20 05:40

とてもわかり易いです。本当にありがとうございます!理解できました。 ただ、ベストアンサーは他の方の方が返事が早かったので、そちらに譲らせてくださいm(_ _)m
guest

0

ベストアンサー

stripではなくsplitを使って下さい。名前が似ているので混同しがちです。

投稿2020/12/20 05:25

LouiS0616

総合スコア35668

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

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

itsuko

2020/12/20 05:33

ありがとうございます...! 恥ずかしながら、spilitは聞いたことがありましたが、勘違いしておりました。 恥ついでになのですが、splitとstripで下のようにできました。 ['5.0', '', '', '', '7.127362210', '', '', '', '7.240419247'] リストの0,4,8番目を取ってきたら良いのですが、途中の1~3や5~7を消すのはどうやればよろしいでしょうか? 最初の質問は解決していただいておりますが、後学のためにご教授いただければ幸いです
LouiS0616

2020/12/20 05:36

.split(' ') ではなく split() とすることで解消するかと思います。
itsuko

2020/12/20 05:38

できました...!ありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問