0

リストとしてcsvファイルの内容を取得するための最良かつ最もエレガントな方法は何ですか? 国、地域、人口などの必須列は、以下のプログラムのように自動的に識別されることに注意してください。

with open ('data.csv','r') as infile:
    contents = infile.read().split(',')

with open ('data.csv','r') as infile:
    countries = [item.split(',')[contents.index('Country')] for item in infile]

with open ('data.csv','r') as infile:
    areas = [item.split(',')[contents.index('Area')] for item in infile]

with open ('data.csv','r') as infile:
    populations = [item.split(',')[contents.index('Population')] for item in infile]

print (countries)
print (areas)
print (populations)

上記のプログラムは機能しますが、かなり短くて読みやすいプログラムを探しています。

更新:「国」などの特定の列がファイルに存在しない場合のエラーを防ぐには、次の方法でプログラムを改善できます。

countries = [item.split(',')[contents.index('Country')] for item in infile if 'Country' in contents]

csvモジュールを使用してどのように行うことができますか??

4

1 に答える 1

3

CSV ファイル用のcsvモジュールを使用します。

import csv

countries = []
areas = []
populations = []

with open ('data.csv', newline='') as infile:
    reader = csv.DictReader(infile)
    for row in reader:
        countries.append(row['Country'])
        areas.append(row['Area'])
        populations.append(row['Population'])

クラスはDictReader()、ヘッダーの最初の行をファイルの残りのキーとして自動的に使用します。

または使用:

import csv

with open ('data.csv', newline='') as infile:
    reader = csv.reader(infile)
    next(reader, None)  # skip the header first
    countries, areas, populations = zip(*reader)

国、地域、人口の 3 つの列だけがこの順序である場合。

于 2013-11-10T14:56:04.153 に答える