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

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

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

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

Python

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

Q&A

解決済

テキスト文字列における":"と","で区切ってcsv化したい

katamalix
katamalix

総合スコア30

Python 3.x

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

Python

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

2回答

0グッド

0クリップ

132閲覧

投稿2023/01/24 08:32

前提

txt

1data 0: 10, 20 2data 1: 20, 30 3data 2: 30, 40 4data 3: 40, 50 5data 4: 50, 60 6data 5: 60, 70

の形式で記述されたテキストファイルがあります。
このファイルにおける:,を目印にして、以下のようなcsvファイルを作成したいです。
イメージ説明

試したこと

Python

1with open(filename, encoding="shift-jis") as f: 2 lines = f.readlines()

はじめに、上記の処理によりテキストを1行ずつリストに格納することを試みました。
その上で、split()によるテキスト分割をしようと思い 試行したところ以下の出力となりました。

Python

1data = linlines[0].split() 2#['data', '0:', '10,', '20']

data[0]およびdata[1]が分割されてしまってる上に、data[2]に余計な,が含まれる結果となってしまいました。
解決策をご教授いただけるとありがたいです。

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

回答2

0

ベストアンサー

python

1import re 2 3filename = 'data.txt' 4with open(filename, encoding="shift-jis") as f: 5 csv_lines = f.read().translate(str.maketrans({' ': '', ':': ','})) 6 #csv_lines = re.sub(r'[ :]', lambda g: {' ': '', ':': ','}[g[0]], f.read()) 7 8print(csv_lines) 9 10# data0,10,20 11# data1,20,30 12# data2,30,40 13# data3,40,50 14# data4,50,60 15# data5,60,70

投稿2023/01/24 08:56

編集2023/01/24 09:02
melian

総合スコア16274

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

katamalix

2023/01/24 08:57

ありがとうございます。 このようにスマートに記述できることに感動しました。 参考にさせていただきます。
melian

2023/01/24 09:03

str.translate() の方が簡便なので、そちらに書き直しました。(import re が不要になります)
katamalix

2023/01/24 09:59

ありがとうございます。 質問ではtxtファイルを読み込むことを想定した記述としましたが、 実際は膨大なtxtファイルから該当部分を抽出したオブジェクトを操作しております。 すなわち、 with open(filename, encoding="shift-jis") as f: lines = f.readlines() lines_len = len(lines) line_arr = np.array(lines) smp_start = np.where(line_arr=="START")[0][-1] smp_end = np.where(line_arr=="END")[0][-1] smp_data = lines[smp_start:smp_end] のような操作をしており、smp_data (リスト) が手元にある状態です。 このリストを一旦txt出力し、再度with文で読ませればmelian様の記述した文で対応できるのですが、 txt出力を介さない方法があればご教授頂きたいです。
katamalix

2023/01/24 10:24

for i in range(len(smp_data)): smp_data[i] = re.split( ",|:",smp_data[i].translate(str.maketrans({' ': '', ':': ',', '\n': ''}))) この記述とし2次元配列化、to_csv()で実現できました。ありがとうございました。

0

以下のような手順はどうでしょうか。

  1. 行からすべての空白を削除。
  2. 「:」 で分割する。
  3. 2つめを「,」で分割する。

re.split()を使えば「:もしくは,で分割する」もできますね。

投稿2023/01/24 08:46

TakaiY

総合スコア10513

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

katamalix

2023/01/24 08:57

なるほど、はじめに空白を詰めてしまえば「空白で分割」したときに","が残ることもないですね。ありがとうございます!

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

ただいまの回答率
86.02%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Python 3.x

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

Python

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