0

私はこのスクリプトを大成功で実行していますが、データをどのように参照しているかについて興味がありました。(他にどのように学ぶのですか?)

input_file = Cars.csv    
with open(input_file) as f:
    reader = csv.reader(f)
    next(reader)
    cars_list = tuple([row[1] for row in reader])

template_cars ="C:\\Data\\CarsTemplate.txt"
cars_textfile = "C:\\Data\\Cars.txt"
shutil.copyfile(template_cars,cars_textfile)

with open(cars_textfile, 'a') as f:
    if len(cars_list) == 0:
        cars_Sentence = ""

    elif len(cars_list) == 1:
        cars_Sentence = "A  %s is parked on the street." % cars_list

    elif len(cars_list) == 2:
        cars_Sentence = "Cars %s and %s are parked on the street." % cars_list

    else:
        for record in cars_list:
            cars_Sentence = "Cars " + ('%s, ' * (len(cars_list)-1) + 'and %s') % tuple(cars_list) + " are parked on the street"

    f.write(cars_Sentence)
f.close()

私のCars.csvファイルのデータ:

RecNo,Model,ItemNo,Count  
1,Prius,1,1  
2,Civic,2,3  
3,Lexus,1,5  
4,Jetta,5,1  
5,Subaru,0,0  

私のデータで機能する上記のコードを考えると、他の列ではなくモデル列を印刷することをどのように知ることができますか?数字ではなく文字列を含む列と関係があると思います。

データに1列ではなく2列の文字列がある場合、必要な列を参照して同じ結果を出力するにはどうすればよいですか?ちょっと興味があるんだけど。コーディングに頭を悩ませようとしています。

繰り返しになりますが、私を助けてくれたすべての人に感謝します。

4

2 に答える 2

1

モデル列のみがファイルから取得されます。

cars_list = tuple([row[1] for row in reader])

これは、入力から各行を取得し (csv モジュールは一連の列に変換します)、2 番目の列のみを取得します (Python は 0 ベースのインデックスを使用します)。

つまり、このコードを書いた人は誰でも、入力ファイルの各行に 4 つの列が含まれており、2 番目の列だけを選択していることを知っていました。別の列にモデルが含まれている場合は、row[1]インデックスを調整する必要があります。

于 2013-03-20T16:15:46.520 に答える
1

多くの場合、ドキュメント (ここでは csv モジュール) を読み、正しく選択することで、コードをかなり改善して、より堅牢で読みやすくすることができます。

CSV ファイルでは、最初の行がフィールド名を示していることに注意してください。コードの次の(リーダー)呼び出しによってスキップされます。

最適なクラスを選択すると、スキップする必要はありませんが、これらのフィールド名へのアクセスを取得するために評価され、最初のセクションは次のようになります。

with open(input_file) as f:
   reader = csv.DictReader(f)
   cars_list = tuple([row["Model"] for row in reader])

これにより、異なる情報を取得するために変更する場所が明確になり、「モデル」列の配置が異なるファイルでも機能します。

于 2013-03-20T17:10:27.260 に答える