0

誰かが私が間違っていることを理解するのを手伝ってもらえますか?ldifファイルとcsvファイルを取得し、csvファイルの内容をldifの各レコードの最後に追加するPythonシェルスクリプトを作成しています。何かのようなもの:

サンプルCSV:

    「KEY」、「VALUE」
    "abc"、 "def"
    「foo」、「bar」
    「qwop」、「flop」

サンプル.ldif:

    dn:アジズ
    cn:Aziz_09

    dn:カール
    cn:Carl_04

python myscript.py "sample.ldif""sample.csv"の後

    dn:アジズ
    cn:Aziz_09
    キー:値
    abc:def
    foo:bar
    qwop:フロップ

    dn:カール
    cn:Carl_04
    キー:値
    abc:def
    foo:bar
    qwop:フロップ

これまでのところ、私のコードはコンパイルされますが、ファイルが正しく変更されません。作成時にcsvファイルのパス名文字列を取得し、キーをリストフィールドに格納し、値をリストフィールドに格納するオブジェクトを作成しています。次に、ldifファイルを開き、レコード間のエスケープ文字を解析して、各レコードの最後にリストフィールド(KEYおよびVALUE)を挿入します。

    sys、csvをインポート

    #csvを開き、その配列にcsvデータを設定できる新しいオブジェクトを作成します
    クラスContainer(object):
      def __init __(self、filename = None、keys = None、values = None):
        self.filename=ファイル名
        self.keys = []
        self.values = []

      #self.filenameを開き、0行目と1行目をそれぞれキーと値に入れます  
      def csv_to_list():
        open(self.filename、'rb')をfとして使用:
          リーダー=csv.reader(f)
          リーダーの行の場合:
            self.keys = row [0]
            self.values = row [1]

    haruhi = Container( "./ content / test_pairs.txt")
    haruhi.csv_to_list

    #読み取り/書き込みのためにldif_record_a.pyへのコマンドライン呼び出しの最初の引数を開きます
    open(sys.argv [1]、'r +')をf1として使用します。
      lines = [x.strip()for x in f1]#各行を要素としてリストを作成します
      f1.truncate(0)
      f1.seek(0)
      カウント=0
      行のxの場合:
         xの場合:
           f1.write(x +'\ n')
         そうしないと:
           f1.write( "{0}:{1} \ n \ n" .format(haruhi.keys [count]、haruhi.values [count]))
           カウント=カウント+1
      f1.write( "{0}:{1} \ n \ n" .format(haruhi.keys [count]、haruhi.values [count]))

Pythonは初めてです!ヘルプ、アドバイス、および/またはリソースの方向性をいただければ幸いです。ありがとうSO

4

1 に答える 1

1

さて、私はこれをアドホックしたので、作業が必要ですが、ここに行きます:

import csv
import re

csv_data = list(csv.reader(open('/home/jon/tmp/data.csv'))) # (1)
csv_text = '\n' + '\n'.join('{0} : {1}'.format(*row) for row in csv_data) # (2)

with open('/home/jon/tmp/other.ldif') as f:
    contents = f.read() # (3)
    print re.sub(r'(\n\n)|(\n$)', csv_text + '\n\n', contents) # (4)
  • (1) CSVファイルをリストのリストに読み込む

    csv_data == [['KEY', 'VALUE'], ['abc', 'def'], ['foo', 'bar'], ['qwop', 'flop']]

  • (2) 各ldifに追加するテキスト表現を作成します

    キー : 値 abc : def foo : バー qwop : フロップ

  • (3)コンテンツ全体を開いてメモリに読み込みます(あまり効率的ではありません)

  • (4) 正規表現を使用して、ldif の後の「次のビット」を見つけ、テキストに入力します

版画:

dn: Aziz
cn: Aziz_09
KEY : VALUE
abc : def
foo : bar
qwop : flop

dn: Carl
cn: Carl_04
KEY : VALUE
abc : def
foo : bar
qwop : flop

データを書き戻したり、必要に応じて調整する必要があります...これは出発点として使用できますが、Python マニュアルを参照して作業するためのベースとして使用することを強くお勧めします。ご不明な点がございましたら、お気軽にお問い合わせください。

于 2012-07-10T17:52:15.987 に答える