web-dev-qa-db-ja.com

Pythonを使用してcsvファイルから最初の10行のみを印刷するにはどうすればよいですか?

Python=は初めてですが、巨大なcsvファイルの最初の10行だけを印刷したいと思っています。

これがcsvファイルのすべての行を出力するこれまでの私のコードです

import csv
with open('titanic.csv') as csvfile:
    reader = csv.DictReader(csvfile)
    for row in reader:
        print(row['survived'], row['pclass'], row['name'], row['sex'], row['age'])
8
Adorabubble

あなたは10行後にちょうどbreakでした。

import csv
with open('titanic.csv') as csvfile:
    reader = csv.DictReader(csvfile)
    for i,row in enumerate(reader):
        print(row['survived'], row['pclass'], row['name'], row['sex'], row['age'])
        if(i >= 9):
            break
11
Adrien El Zein

itertools.isliceを使用:

import csv
from itertools import islice

with open('titanic.csv') as csvfile:
    reader = csv.DictReader(csvfile)
    for row in islice(reader, 10): # first 10 only
        print(row['survived'], row['pclass'], row['name'], row['sex'], row['age'])

その間、operator.itemgetterを使用して列を少し簡単にすることもできます。

import csv
from itertools import islice
from operator import itemgetter

get_columns = itemgetter('survived', 'pclass', 'name', 'sex', 'age')

with open('titanic.csv') as csvfile:
    reader = csv.DictReader(csvfile)
    for row in islice(reader, 10): # first 10 only
        print(*get_columns(row))
13
Jon Clements

エイドリアンエルゼインの答えはあなたの質問に十分です。ただし、少しわかりにくいと思われる場合(そうは思いません):

import csv
counter = 0

with open('titanic.csv') as csvfile:
    reader = csv.DictReader(csvfile)
    for row in enumerate(reader):
       print(row['survived'], row['pclass'], row['name'], row['sex'], row['age'])
       counter += 1
       if counter >= 9:
           break

変数名をiからcounterに変更しただけです。また、代替ループの場合:

import csv
counter = 0

with open('titanic.csv') as csvfile:
    reader = csv.DictReader(csvfile)
    for row in enumerate(reader):
       print(row['survived'], row['pclass'], row['name'], row['sex'], row['age'])
       while counter < 10:
           counter += 1
       else:
           break

Python 3.4.3(使用しているバージョンがわからない))を使用してwhile-elseループを試し、テストしたところ、正しく動作することがわかります。

1
user8441455

選択フィールドを使用して、CSVファイルから上位N行を取得するには

#for python 3
import csv
from operator import itemgetter
N=11 # to get 10 rows need use 10+1=11
fname='titanic.csv'
get_columns=itemgetter('survived', 'pclass', 'name', 'sex', 'age')

with open(fname,'r') as csvfile:
    reader = csv.DictReader(csvfile.readlines()[0:N])
    [print(*get_columns(row)) for row in reader]

     # or for all fields : use [print(row)) for row in reader]