こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Pythonでの文字列の操作

とあるデータをPythonを使って整形したいのですが、文字列の操作でつまずいて居りますのでご教示いただけたらと思います。

編集したい文字列は以下のように"|"(パイプ)で7つのカラムに区切られています。

1|Jun 19, 2014 06:00:15.586099000|192.168.100.225|62763|192.168.100.255|8612|60
2|Jun 19, 2014 06:00:20.636389000|192.168.11.100|1900|249.255.255.250|1900|332
3|Jun 19, 2014 06:00:20.636879000|192.168.11.100|1900|219.255.255.250|1900|323
4|Jun 19, 2014 06:00:20.636879000|192.168.11.100|1900|209.255.255.250|1900|397


2行目が日付と時刻を示していることが分かるかと思います。それ以外の行の意味は気にしなくて結構です。
私が変更したいのは2行目のみで、以下のように変更したいのです。

1|Jun 19, 2014|06|192.168.100.225|62763|192.168.100.255|8612|60
2|Jun 19, 2014|06|192.168.11.100|1900|249.255.255.250|1900|332
3|Jun 19, 2014|06|192.168.11.100|1900|219.255.255.250|1900|323
4|Jun 19, 2014|06|192.168.11.100|1900|209.255.255.250|1900|397


このように、日付と時間をパイプで区切り、更に時刻の部分の「分」以下の部分を削除したいのです。

上のデータをファイル入力として、下のデータをファイル出力したいのですが、いろいろ調べてもなかなか実現できません。


どのようなPythonスクリプトを書けばよいのか教えていただけたらと思います。

解説サイト等を紹介してくださっても嬉しいのですが、より具体的なコードを書いてくださった方にベストアンサーにさせていただこうと思います。

投稿日時 - 2014-06-20 21:23:59

QNo.8646506

すぐに回答ほしいです

質問者が選んだベストアンサー

>「Pythonの勉強をすること」

ということなので。

常套手段は、次のような流れのものです。
(1) 1行読み込む
(2) (1)の行を加工する
(3) (2)で加工した文字列を書き出す
(4) 以上(1)~(3) をファイル全部に対して繰り返す

(1),(3),(4)については、チュートリアルで勉強できます。
http://docs.python.jp/2.7/tutorial/
http://docs.python.jp/3.3/tutorial/

(2)について、今回は特定のパターンでの変換となるので、正規表現を使った置換が便利でしょう。
http://docs.python.jp/2/howto/regex.html
http://docs.python.jp/3.3/howto/regex.html


> いろいろ調べてもなかなか実現できません。

どんなことをして、どんな風に「実現できません」だったのでしょう?
原因を調査して対策を考える、というのは、プログラミングの基本です。
Pythonの勉強が目的ならば、この解析もきっちりとやりましょう。

例えば、上記の流れでも、(1)~(4)のそれぞれに「うまくいかない場合」が存在します。
(1)が失敗しているのに、(2)を変更しても無意味です。



> 「ほかの言語のほうが書きやすい」

例えば、「パターンマッチによる置換」ができるテキストエディタでできます。
# Windowsのメモ長等の一部の低機能なもの以外なら、大抵のものが該当します
数ファイルだったら、プログラム作っている間に処理が終了します。

例えば、UNIX系に標準のsedコマンドを使えば、1行で書けます。
ファイルが大量にあっても、シェルスクリプトやバッチファイルの繰り返し機能(for 等)を使えば簡単です。





※ 別解
import os
os.system(r"sed 's/ \([0-9]*\):[0-9][0-9]:[0-9]*\.[0-9]*/|\1/' infile > outfile")
sedコマンドが使える環境限定

投稿日時 - 2014-06-21 08:15:57

お礼

ありがとうございました!

>(2) (1)の行を加工する
の部分でつまずいていたのですが無事解決しました。

別解の部分では、osパッケージをインポートしてlinuxコマンドが呼び出せることすら知りませんでした、、、

もっと勉強します。

投稿日時 - 2014-06-21 19:32:52

ANo.2

このQ&Aは役に立ちましたか?

11人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

確認だけど....

Python でないといけない理由ってなに?

投稿日時 - 2014-06-20 23:46:19

補足

はい、
一応目的は「このデータを整形すること」と、「Pythonの勉強をすること」なので、、、
「ほかの言語のほうが書きやすい」という意見があればごもっともですが、できればPythonで書きたいのです。

投稿日時 - 2014-06-21 00:40:27

あなたにオススメの質問