1

同じCSVを2回読んでいるため、このエラーが発生していると思いますが(なぜこれが問題なのか完全にはわかりません)、次の2つのことを行うには以下のコードが必要です...

1) CSV 内のすべての行の合計数を教えてください。

2)ユーザーに表示するデータの最初の2 行のみを提供してください。

file = upload.filepath
#I READ THE FILE
file_read = csv.reader(file)

#GET THE COUNT I.E. 100 ROWS
row_count = sum(1 for row in file_read)

#ADD TO DATA JUST THE FIRST TWO ROWS THAT I WILL USE TO DISPLAY BACK TO THE USER
data = []
for i in range(2):
    data.append(file_read.next())

どうすればこれを達成できますか?

4

3 に答える 3

4

isliceあなたができることを使用して:

from itertools import islice
import csv

with open('somefile') as fin:
    csvin = csv.reader(fin)
    firstn = list(islice(csvin, 2))
    rows = len(firstn) + sum(1 for row in csvin)

これにより、ファイルを読み取って最初にシークする必要がなくなり、行数が正しく返され、その後または例外が発生した場合にファイルが自動的に閉じられます。

于 2013-04-22T10:09:47.950 に答える
3

2 つのステートメントを逆にしてみませんか? 以下を使用して、最初の 2 行を読み取ることができます。

#ADD TO DATA JUST THE FIRST TWO ROWS THAT I WILL USE TO DISPLAY BACK TO THE USER
data = []
for i in range(2):
    data.append(file_read.next())

次に、残りの行の行数を計算し、2 を追加します。

#GET THE COUNT I.E. 100 ROWS
row_count = 2 + sum(1 for row in file_read)

ただし、2 行未満の場合、誤った結果が得られます。より良い解決策は、単純にファイル全体を読み込んでから、結果のリストの行を数えることです。

import csv

# Open the file upload.filepath, get a pointer in file
# file automatically closed at end of 'with' context
with open(upload.filepath, 'r') as file:

    #I READ THE FILE
    file_read = csv.reader(file)

    data = []
    for row in file_read:
        data.append(row)

    rows = len(data)
    first_two_rows = data[:2]

それが巨大なファイルであり、メモリが心配な場合は、カウント変数を追加して、<=2 の場合にのみデータに追加できます。

data = []
rows = 0
for row in file_read:
    rows += 1
    if rows<3:
        data.append(row)
于 2013-04-22T10:02:22.323 に答える