1

ユーザーが Web インターフェイスにログインして、注文を追跡できるシステムをセットアップしようとしています。システムは、最初の確認から生産まで注文を追跡し、最終的に出荷前に停止します。(私の妻が説明したように、「ドミノのピザ注文トラッカーに似ていますが、名刺用です。」) コンマ区切りの .txt ファイルの絶え間なく変化するディレクトリからデータを解析する必要がある時点で立ち往生しています。注文が行われるたびに、Web インターフェイスに表示されるあらゆる種類の重要な情報を含む独自の .txt ファイルが自動的に生成されます。例えば:

H39TZ3.txt:

token,tag,prodcode,qty          #(These are the headers)
,H39TZ3,pchd_4stpff,,100        #(These are the corresponding values for part 1 of the order)
,H39TZ3,pchdn_8ststts,6420-PCNM8ST,100   #(These are values for part 2 of the order)

ディレクトリには常に 300 以上の異なる .txt ファイルがあり、ファイルは注文ステータスに基づいて行き来します (出荷されると、ファイルはアーカイブされます)。個々のファイルと値を辞書にインポートしますが、私が見つけたものはすべて単一のファイル用です。複数のファイルに対してのみ、このようなものを書くにはどうすればよいですか?

import csv

d = {}

for row in csv.reader(open('H39TZ3.txt')):
    d['Order %s' % row[1]] = {'tag': row[1], 'prodcode': row[2], 'qty': row[3]}

ありがとう!

4

2 に答える 2

4

os.listdir()ファイルを含むディレクトリの内容を一覧表示するために使用でき.txtます。次のようなものがうまくいくはずです:

for filename in os.listdir("."):
    with open(filename) as csv_file:
        for row in csv.reader(csv_file):
            d['Order %s' % row[1]] = {'tag': row[1], 'prodcode': row[2], 'qty': row[3]}

withそこにステートメントを追加したことに注意してください。ファイル記述子を無駄にしたり使い果たしたりしないように、処理が終了したら必ずファイルを閉じます。関心のあるファイル以外のファイルがディレクトリに含まれている可能性がある場合は、withステートメントの前に適切なフィルタリングを追加できます。

于 2012-10-24T19:06:28.410 に答える
3

csv.DictReader行を辞書として読みたい場合は、おそらくより良いオプションであると付け加えたいと思います。最初の行 (ヘッダー) に基づいて辞書のキーが自動的に設定されます。次のように使用します。

with open(filename) as csv_file:
    for row in csv.DictReader(csv_file):
        d['Order ' + row['tag']] = row

ただし、dm03514 が言及しているように、データベースの方がおそらくより適切なオプションです。sqlite には Python (sqlite3モジュール) が付属しており、さまざまなツールを使用してデータベースを検査および変更できます。また、個々のファイルを使用するよりも堅牢である必要があります。

于 2012-10-24T19:09:28.890 に答える