2012-03-01 24 views
1

私はpythonには非常に新しい、私はここでそれを使用しているように私はfileIOのために良いです。前の行に基づいてCSVファイル内の行を編集する

次の形式のCSVファイルがあります。スタッフの毎日の活動を記録します。


日、名前、プロジェクト、マネージャー

01/01/10、トミー、HyperDyne、ジョーBloggs

01/01/10、スー、ロボット、ジョーBloggs

01/01/10、マーク、HyperDyne、

02/01/10、トミー、SICKジョーBloggs、

03/01/10、TOMM y、HyperDyne、Joe Bloggs


従業員がSICKとしてマークされている場合、マネージャーフィールドは常に空白です。 Managerフィールドにその従業員の前のマネージャエントリを入力したいと思います。私はcsv内のすべての空白を埋める必要があり、私たちが言うことができないときはNULLSを入れます。擬似コードっぽいで

Forall lines n 
if n.Project = "Sick" 
    y = 1 
    if n-y.name = n.name 
     n.manager = n-y.manager 
    else y++ 
    if y > n 
     n.manager = null 

(おそらく、おそらく、yの< n個のループの中にそれをラップすることができ)

これは、どちらかの入力ファイル、または出力新しいファイルを編集する必要があります。人々が複数日連続して病気になる可能性があるため、入力ファイルの編集がより簡単になると思う。アイブ氏は

答えて

0

手続き型プログラミングを行っているので

あなたは、input.csvの各ラインを通過読ん+それを確認してから出力CSVにそれを書くことができるいくつかのアドバイス、そのなって年齢を大好きです。 行をループしている間は、各人物の前のマネージャーの記録を保管してください。あなたは「SICK」行に遭遇したとき は、ここで説明するためにいくつかのincpompleteコードですあなたの記録

の前のマネージャーを検索:

previous_managers = dict() 
for line in csv: 
    name = line.name 
    project = line.project 
    manager = line .manager 

    if project == 'SICK': 
     manager = previous_managers[person] or 'NULL' 
    else: 
     previous_managers[person] = manager 

    write(name, project, manager) 
+0

これはとても単純ですが、私はそれを見ていないと信じていません。 SQLをあまりにも長く行っている! – Pythonn00b

0

最も簡単になり、新しいファイルを出力します。

従業員からマネージャーへのディクショナリを更新し、それを更新するか、各行に問い合せます。

0

これを行うことをお勧めする方法は、csvreaderを使用してcsvをリッピングし、以前のマネージャの辞書を作成することです。彼らが病気だったら、リストから前のマネージャーをつかんでください。そうでなければ、前のマネージャーを更新してください。

私は以下のかなり良い例を提供しました。私はまだそれをテストしていないので、いくつかの書式設定を修正する必要があるかもしれませんが、これはほとんどのコンセプトです。

#import csv library to handle the csv, the sys library for sys.argv[1] which allows you to use command line arguments 

import csv 

#reading the input .csv file 
filename = #insert filename here 
input = open(filename,'r') 
reader = csv.reader(input) 
output = open('out.csv','w') 

prevManager = {} 

for row in reader: 
    date = row[0] 
    name = row[1] 
    project = row[2] 
    if project == 'SICK': 
     manager = prevManager[name] 
    else: 
     manager = row[3] 
     prevManager[name] = manager 
    output.write(date,name,project,manager) 

input.close() 
output.close() 
関連する問題