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

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

ただいまの
回答率

90.52%

  • Python 3.x

    6359questions

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

python 繰り返し ファイル 処理

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 375

junnnn

score 11

python 3.x ファイルの操作をもっと充実にしていきたい。

エクセルで常に上書き(更新)しているファイルをpythonで常に保存された値を呼び出す方法を教えて頂きたいです。
例)時刻 13:05:00 に保存したファイル。 (*1)
A | B | C | D | E
1| 1 | 2 | 3 | 4 | 5
2| 2 | 3 | 4 | 5 | 6
3| 3 | 4 | 5 | 6 | 7

例)時刻 13:06:00 に保存したファイル。 (*2)
A | B | C | D | E
1| 1 | 2 | 3 | 4 | 5
2| 2 | 3 | 4 | 5 | 6
3| 3 | 4 | 5 | 6 | 7
4| 4 | 5 | 6 | 7 | 8

例)時刻 13:07:00 に保存したファイル。 (*3)
A | B | C | D | E
1| 1 | 2 | 3 | 4 | 5
2| 2 | 3 | 4 | 5 | 6
3| 3 | 4 | 5 | 6 | 7
4| 4 | 5 | 6 | 7 | 8
5| 5 | 6 | 7 | 8 | 9
* 1分ごとに保存されている(*1~*3)ファイル。

python

import time 

A = []
B = []
C = []
D = []
E = []

while True:
with open('file.CSV',encoding='UTF-8')as f:
for file in f:
data = file.strip().split(',')
a = data[0]
b = data[1]
c = data[2]
d = data[3]
e = data[4]
if a not in A: #もし A のリストに a の値がなかったら追加する
A.append(a)
B.append(b)
C.append(c)
D.append(d)
E.append(e)
else: # A に値があれば追加しない
continue 
print(A)
print(B)
print(C)
print(D)
print(E)
time.sleep(60) #60秒後に繰り返し

実際の実行結果         希望結果
1 2 3        実行時の値      1 2 3
2 3 4                      2 3 4 
3 4 5                      3 4 5 
4 5 6                      4 5 6
5 6 7                      5 6 7

1 2 3        1分後         1 2 3 4
2 3 4                      2 3 4 5
3 4 5                      3 4 5 6
4 5 6                      4 5 6 7
5 6 7                      5 6 7 8

1 2 3        2分後         1 2 3 4 5 
2 3 4                     2 3 4 5 6 
3 4 5                     3 4 5 6 7 
4 5 6                     4 5 6 7 8 
5 6 7                     5 6 7 8 9 

実際の実行結果ではwhile文によって繰り返し処理され同じ値しか出ません。
*デバッグすれば値は希望する値になります。
希望はいちいちデバッグせずにエクセルで上書き保存したファイルをpythonで自動的に処理してくれる方法にしたいです。

どうか教えください。
宜しくお願い致します。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

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

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

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

check解決した方法

0

解決いたしました。

リストをWHILE文の前につけるか後につけるかでした。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

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

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

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

a not in Aが常にFalseということでしょうか?

そもそもファイル自体が以前の行を消すことなく、増えて行くだけなら、最後にappendした行数を記録しておいて、読み込んだファイルの行数がそれ記録したものよりも大きくなった分を追加すればよいのでは?


以下追加
次のようにもとのコードを解釈しています。

import time 
A = []
B = []
C = []
D = []
E = []

while True:
    with open('file.CSV',encoding='UTF-8') as f:
        for file in f:
            data = file.strip().split(',')
            a = data[0]
            b = data[1]
            c = data[2]
            d = data[3]
            e = data[4]
            if a not in A: #もし A のリストに a の値がなかったら追加する
                A.append(a)
                B.append(b)
                C.append(c)
                D.append(d)
                E.append(e)
            else: # A に値があれば追加しない
                continue 
    print(A)
    print(B)
    print(C)
    print(D)
    print(E)
    time.sleep(60) #60秒後に繰り返し

>while文によって繰り返し処理され同じ値しか出ません
とあるので、if a not in Aが常に偽となり、elseの中身がいつも実行されていると解釈しました。
正しいインデントだとそのようなことが起きるべきではない気がしますが、なぜか起きているのでそこを事実として受け止めることにしました。

代わりにもっとシンプルの方法として、以下のものを提案しました。
こちらのほうがsplit()、代入等を一度だけで済ましていて、特にデータが蓄積してからの処理量を削減できます。
ただし、行数が単調に増加していくことを仮定しています。
途中でfile.CSVがリセットされてまっさらの状態になってしまうことがあると、一部のデータを取りこぼします。

import time 
A = []
B = []
C = []
D = []
E = []

current = 0
while True:
    with open('file.CSV',encoding='UTF-8') as f:
        content = f.readlines()
    if len(content) > current:
        for line in content[current:]:
            data = line.strip().split(',')
            a = data[0]
            b = data[1]
            c = data[2]
            d = data[3]
            e = data[4]
            A.append(a)
            B.append(b)
            C.append(c)
            D.append(d)
            E.append(e)
    current = len(content)
    print(A)
    print(B)
    print(C)
    print(D)
    print(E)
    time.sleep(60) #60秒後に繰り返し

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

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

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

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/11/09 21:26

    すみません。
    どう言った意味なのでしょうか?

    キャンセル

  • 2017/11/09 22:09

    コードを載せるため回答に追記しました。

    キャンセル

  • 2017/11/09 22:18

    ありがとうございます。解決いたしました!
    欲しかった結果が得られました!

    キャンセル

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

  • ただいまの回答率 90.52%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    文字列を空白で分割してリストにしたい

    よろしくお願いいたします. 文字列を空白で分割してリストにしたいのですが, ダブルクオートやシングルクオートで囲まれている場合は分割しないようにしたいです. つまり, str =

  • 受付中

    python ランキング 書き込み

    以前作っていただいたコードを書き直してランク付けした上で他のtxtファイルに移す作業のコードを教えていただきたいです。 https://teratail.com/ques

  • 解決済

    python path 条件を指定し、抜きだし

    1803/H28-6m/XBRL/1803_H28-6m_4Q.xbrl 1803/H29-3m/XBRL/1803_H29-3m_4Q.xbrl 1803/H29-6m/XBRL

  • 解決済

    tupleとlistの違い

    tupleとlistの違いとして、 ① tupleは変更不可だから緯度のような不変のものに使える ② listよりもパフォーマンスが良い(実行速度が少し早い) とwebに書いていま

  • 解決済

    python ¥ を使用したらエラーが出ました。

    「はじめてのPythonAIプログラミング」という書籍で取り組んでいる際に以下のエラーメッセージが発生しました。  発生している問題・エラーメッセージ invalid char

  • 解決済

    csvファイルへの書き込みが上手くいきません。

     前提・実現したいこと 5秒おきにデータを取得し、それをcsvファイルに書き込みプログラムを作成しています。  発生している問題・エラーメッセージ 実行することは可能でデータの

  • 解決済

    映画のチケットを買う待ち行列をPythonで表現したい

    「独学プログラマー」P.255に載っているコードです キューを使って、映画のチケットを買う待ち行列を表現しています。 import time import random cl

  • 解決済

    ifの条件部を外部ファイルで持ちたい

     実現したいこと ユーザー別にifの条件部を変更したい. //userA if time is 7: print("wake up") //userB if ti

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

  • Python 3.x

    6359questions

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