質問するログイン新規登録

Q&A

解決済

1回答

331閲覧

CSVへの結果が1列になるので、各値ごとに複数列にしたい

退会済みユーザー

退会済みユーザー

総合スコア0

Python 3.x

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

0グッド

0クリップ

投稿2018/10/11 14:39

編集2018/10/12 00:07

0

0

前提・実現したいこと

以下の記載している内容で結果はでるのですが、列を複数にすることができません。
どうすればよろしいでしょうか。

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

複数列に結果がでない

該当のソースコード

python3

1 2import csv 3import re 4 5file = open('C:\Users\ho\py\log\log-181010.txt') 6 # openしたファイルから1行ずつ読み込んでいく 7files = csv.reader(file) 8for row in files: 9 for col in row: 10 df = re.search(r'(?<=cookie=)[^&]*', col) 11 if df: 12 13 for col in row: 14 df = re.search(r'(?<=prod=)[^&]*', col) 15 if df: 16 17 with open("output.csv", "a",newline='') as file: 18 print(df.group(0), file=file)

現状のCSVの内容は以下になります。
a列       b列
nemw8arwbn718sv2
nemw8arwbn718sv2
v6c42ptti4ftq0ad
v6c42ptti4ftq0ad
237761
237761
237761
237761
237761
228353

上記を以下にしたいです。
a列        b列
nemw8arwbn718sv2  237761
nemw8arwbn718sv2  237761
v6c42ptti4ftq0a   237761
v6c42ptti4ftq0a   237761
237761
228353

試したこと

結果を1列でなく、項目ごとに複数列にしたい

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

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

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

can110

2018/10/11 14:42

具体的なlog-181010.txtのデータ例を追記くださると回答得られやすいです。
tiitoi

2018/10/11 14:43 編集

コードから意図を読み取るのが難しいので、入力のCSVと期待する出力のCSVを質問欄を編集して貼ってください
hichon

2018/10/11 22:21

一度も改行を出力しなければそうなります。
退会済みユーザー

退会済みユーザー

2018/10/11 23:56

ログの内容は以下になります。時系列に以下の1行がいくつもある形になります。
退会済みユーザー

退会済みユーザー

2018/10/11 23:58

/unitag/jsonp/re3?merch=ppp&cookie=v6ad&pgid=0&spec=1&pgtype=sp_pddt&action=0&widget_divid=rec_sp311&random=768400&keep_history=1&prod=196011
退会済みユーザー

退会済みユーザー

2018/10/12 00:00

現在は以下の形でCSVへ出力されております。
thinkn1108

2018/10/12 01:17

C:\\Users\\ho\\py\\log\\log-181010.txt の中身が「現状のCSVの内容は以下になります。」のところですか?
退会済みユーザー

退会済みユーザー

2018/10/12 02:18

はいそうです
tiitoi

2018/10/12 03:27

2列にする部分は4行固定なのでしょうか?それともなにか規則があるのでしょうか?
退会済みユーザー

退会済みユーザー

2018/10/12 04:05

いえ、4行固定ではございません。こちらは増え続けます。
tiitoi

2018/10/12 04:06

出力を作る際に2列目に折り返す基準がわからないのですが、なにを基準に2列目に折り返すのですか?
退会済みユーザー

退会済みユーザー

2018/10/12 07:51

こちら引っ張ってくるパラメータが違うので、その各パラメータごとに列を変更したいと考えております
guest

回答1

0

ベストアンサー

これで動きますか?
(追記)変数間違っていたので変更しました

import csv import re # openしたファイルから1行ずつ読み込んでいく f = open('C:\Users\ho\py\log\log-181010.txt') for line in f: cookie = re.search(r'(?<=cookie=)[^&]*', line) prod = re.search(r'(?<=prod=)[^&]*', line) if cookie and prod: with open("output.csv", "a",newline='') as file: print("{},{}".format(cookie.group(0), prod.group(0)), file=file)

投稿2018/10/12 05:36

編集2018/10/12 13:53
thinkn1108

総合スコア45

退会済みユーザー

退会済みユーザー

2018/10/12 08:31

上記で行うと値が返ってこなくなりました。 if cookie and prod: の部分の記述は何をしているのでしょうか。 大変申し訳ないですが宜しくお願い致します。
退会済みユーザー

退会済みユーザー

2018/10/12 09:02

頂いた内容を実行すると以下の回答が出てきます。 <_sre.SRE_Match object; span=(196 212) match='24xbz0fx6clmg3g5'> None
thinkn1108

2018/10/12 12:20

if文外してインデントを下げると動きますか? `cookie and prod`はcookieとprodが見つかったら、という意図で書いています
退会済みユーザー

退会済みユーザー

2018/10/12 12:49

意味教えて頂き有難うございます。 こちらif文外しても結果かわりませんでした。 うまくファイルをすべて行読み込めてないのでしょうか。
thinkn1108

2018/10/12 13:53

変数名間違えてました。編集したのでもういっちょ試してみてください。
退会済みユーザー

退会済みユーザー

2018/10/12 16:42

こちら戻り値は、しっかり返ってくるようになったのですが、実際1000行、2つの項目で1000行くらいの結果がでるはずが、30件しか出ないです。何故でしょうか。 ファイルを読むことができていないでしょうか。
退会済みユーザー

退会済みユーザー

2018/10/12 16:54

私の勘違いでした。うまく1つ1つのログから、指定する値が入っているデータの抽出ができておりました。 大変勉強になりましたし、解決させて頂き有難うございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.29%

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

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

質問する

関連した質問