Проблема с чтением CSV-файла

У меня проблемы с чтением сохраненного csv с помощью python:

import csv


with open('blah.csv','rb') as csvfile:
    data = csv.reader( csvfile )
    row_count = sum(1 for row in data)
    print row_count


    r = 1
    for row in data:
        print r

Моя проблема в том, что хотя python, кажется, распознает файл и распознает, что row_count = 9 (и печатает это), он не печатает r для каждой строки в более позднем цикле.

Этот код правильно работает на моем компьютере, но не в облаке на www.pythonanywhere.com.


person Liam Flynn    schedule 12.07.2015    source источник
comment
Возможный обман stackoverflow.com/questions/11150155/   -  person pvg    schedule 12.07.2015
comment
кстати, row_count = len(data) будет аккуратнее?   -  person hwjp    schedule 13.07.2015


Ответы (1)


Это потому, что в следующей строке — row_count = sum(1 for row in data) — вы уже прочитали файл, и он достиг своего конца. Так что, когда вы снова попытаетесь сделать -

for row in data:
    print r

Это не сработает, потому что файл data находится в конце.

Одна из многих вещей, которые вы можете попробовать, — это снова открыть файл, чтобы прочитать его с самого начала.

Пример -

import csv
with open('blah.csv','rb') as csvfile:
    data = csv.reader( csvfile )
    row_count = sum(1 for row in data)
    print row_count

with open('blah.csv','rb') as csvfile:
    data = csv.reader( csvfile )
    r = 1
    for row in data:
        print r

Хотя вы также можете сделать как подсчет строк, так и печать строки в один цикл, например -

import csv
with open('blah.csv','rb') as csvfile:
    data = csv.reader( csvfile )
    row_count = 0
    for row in data
        row_count += 1
        print row
    print row_count

Еще одна вещь, которую вы можете сделать, это -

csvfile.seek(0) #to make the file point to the start.

Пример -

import csv
with open('blah.csv','rb') as csvfile:
    data = csv.reader( csvfile )
    row_count = sum(1 for row in data)
    print row_count
    csvfile.seek(0)
    r = 1
    for row in data:
        print r
person Anand S Kumar    schedule 12.07.2015