0

こんにちは、ファイル内の情報を再フォーマットして、'|' の区切り文字ではなくコンマで区切られるようにこのプログラムを作成しました。インデックスを使用してファイルから辞書への情報を取得しますが、私の問題は実際にそれを行っていることです。ディクショナリの使用方法を理解するのに少し苦労しています。簡単に思えましたが、ディクショナリに出力された情報にアクセスするにはどうすればよいですか?それは作成しますか?それとも、その情報が出力される出力ファイルを作成する必要がありますか?

def dicList():
    dictList = csv.reader(open('C:/Python/data.txt', 'rb'))
    for row in dictList:
        newRow= ' '.join(row)
        listOne = newRow.replace('|',',')

もう1つの小さなことですが、この関数の出力は次のような値を出力します"hash,version,product,os

引用符がないと、私が望むリストとして出力されず、それを実現する方法もわかりません。

私が全体的にやろうとしているのは、辞書を書いて、別のファイルの値と照合できるようにすることです。この方法を使用している理由は、ファイルが巨大であるため、それらを互いに実行して一致させることができなかったからです。私が望んでいたのは、この辞書を使用して他のファイルの値を実行し、一致を別のファイルに出力することです。意味がない場合は明確にすることができます。

私が持っている情報がファイルにあることをもう少し明確にしましょう。情報はそのファイルに「データ、データ、データ」として出力されます。関数を介してリストに情報があります

def dicList():
dictList = csv.reader(open('C:/Python/hashsetsdotcom_data.txt', 'rb'), delimiter = '|')
for row in dictList:
        print row[0], row[2]

ここに出力する 2 つの値は、キー、値として辞書に入れたい値ですが、800 万行程度のファイル全体を反復処理したいので、このデータを使用して実行できるようにしたいと考えています。このファイルに関連する別のファイルから値を取得して、辞書の値と照合し、一致した値を別のファイルに出力します。だから最後に私は

"Key,Value" ---- 別のファイルからの "Match" を使用。

もっと明確にすべきだったのに、どこまで具体的であるべきか分からなかった。

これが私のコードの現在の場所です。別のテキスト ファイルのデータ値を辞書の値と一致させようとして問題が発生しています。これは正しい可能性がありますか? そのような値を持つファイルを反復処理し、スクリプトを実行してそれらが辞書の値と一致するかどうかを確認し、最後の関数で試したように 3 つすべてを出力するには?

def dicList():
dictList = csv.reader(open('C:/data.txt', 'rb'), delimiter = '|')
for row in dictList:
        print row[0], row[2]

def dictAppend():
output = []
fhand = open('C:/Python/lex.txt', 'w')
for row in dicList():
    one_entity = {row[0]:row[2]}
    output.append(one_entity)

def findMatch():
fhand = open('C:/Python/search.sql', 'r')
fig = open('C:/Python/lex.txt', 'w')
for line in fhand:
    if line[1] == dictAppend()[0]:
        fig.write(dictAppend()[0], dictAppend[1], line[13])
4

2 に答える 2

3

コメントごとに、2 つのソリューションを含めます。1 つはコメントへの応答であり、もう 1 つは CSV の Excel ダイアレクトのようなヘッダーの存在を想定しています。

あなたのソリューションの問題点は、データを反映するように区切り文字を設定していないことです

def dicList():
    dictList = csv.reader(open('C:/Python/data.txt', 'rb'), delimiter="|")
    for row in dictList:
       #the data should now be pre-separated into a list
       print row

これにより、コンマではなくパイプでフィールドが分​​割されます。辞書は必要ありません。他の csv ファイルと同じようにリストになります。それらをコンマで結合し、必要に応じて出力として書き戻すことができます。

希望する辞書形式を取得するには、インデックスで値にアクセスし、手動で変換する必要があります。

output = []
for row in dictList:
  one_entity = {row[0]:row[1],row[2]:row[3]}
  output.append(one_entity)

もちろん、コメントで述べたように、交互のキーと値の形式でデータが正規化されていると仮定します。

key1|val1|key2|val2

各フィールドがディクショナリでキー設定された、ヘッダー付きの csv のソリューション:

data_dictionary = dict()
line_no = 0

fields = 0
output = []

csv_data = csv.reader('C:\filepath')
for line in csv_data:
  if line_no == 0:
    #read the first line as the keys for the final dict
    fields = line
    line_no+=1
    continue

  field_index = 0
  one_entity = {}
  for answer in line:
    one_entity[fields[field_index]] = answer.strip()
  output.append(one_entity)
  line_no+=1

これらのソリューションを組み合わせることで、必要な場所に到達できるはずです。

編集

彼が指摘するまで私はそれを認識していませんでしたが、JF Sebastian はcsv.dictReader上記の例を達成することについて言及しています。これは、パラメーターに値が渡されない場合、デフォルトで csv ファイルの最初の行をフィールド名として使用しfieldnamesます。

http://docs.python.org/library/csv.html#csv.DictReader

于 2012-06-28T16:11:09.333 に答える
0

辞書はキーと値のペアを作成するので、

Diclist = {}

空の辞書を作成します

diclist["hello"] = 5

キーが「hello」で値が 5 のエントリを作成します

diclist["hello"] = [5,6,7,8,9]

そのエントリをリストで上書きします

print diclist["hello"]

そのリストを印刷します

for x in diclist

x は diclist のすべての値になります。

于 2012-06-28T16:07:00.620 に答える