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

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

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

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

Q&A

解決済

1回答

241閲覧

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

退会済みユーザー

退会済みユーザー

総合スコア0

Python 3.x

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

0グッド

0クリップ

投稿2018/10/11 14:39

編集2018/10/12 00:07

前提・実現したいこと

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

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

複数列に結果がでない

該当のソースコード

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.48%

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

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

質問する

関連した質問