Переключение файлов для чтения в .csv читателя Python - PullRequest
0 голосов
/ 12 июля 2010

Я читаю CSV-файл несколько раз, но уменьшаю его размер каждый раз, когда просматриваю его. Итак, как только я достиг дна, я пишу новый CSV-файл, который, скажем, является нижней половиной CSV-файла. Затем я хочу изменить читатель csv для использования этого нового файла, но он, похоже, не работает ... Вот что я сделал.

                    sent = open(someFilePath)
                    r_send = csv.reader(sent)
                    try:

                        something = r_send.next()

                    except StopIteration:
                        sent.seek(0)
                        sent.close()
                        newFile = cutFile(someFilePath, someLineNumber)
                        sent = open(newFile, "r")
                        r_send = csv.reader(sent)

где cutFile делает ..

def cutFile(sender, lines):
    sent = open(sender, "r")
    new_sent = open(sender + ".temp.csv", "w")
    counter = 0

    for line in sent:
        counter = counter + 1
        if counter >= lines:
            print >> new_sent, ",".join(line)

    new_sent.close()   
    return sender + ".temp.csv"

Почему это не работает?

Ответы [ 2 ]

1 голос
/ 12 июля 2010
  1. Находится ли something = r_send.next() в каком-то цикле?То, как вы это написали, будет читать только одну строку.
  2. Зачем вам нужно ",".join(line)?Вы можете просто напечатать line, и он должен работать.
  3. Кроме того, на самом деле нет необходимости seek(0) перед закрытием файла.
0 голосов
/ 12 июля 2010

Я предлагаю следующее:

Используйте for something in r_send: вместо something = r_send.next();вам даже не понадобится попытка ... кроме блоков, поскольку вы просто поместите материал, закрывающий исходный файл, за пределы этого цикла (как уже упоминал кто-то, вы даже не просматриваете исходный файл в своем текущем коде),Тогда вы, вероятно, захотите обернуть все это в другой цикл, чтобы он продолжался до тех пор, пока файл не будет полностью обработан.

Используйте new_sent.write(line) вместо print >> new_sent, ",".join(line).Не то, чтобы это имело большое значение, кроме бита ",".join (который вам не нужен, поскольку вы не используете модуль csv для записи в файл), который вы не должны использовать здесь в любом случае,но это делает тот факт, что вы пишете в файл, более очевидным.

Итак ...

sent = open(someFilePath)
r_send = csv.reader(sent)

someLineNumber = len(sent.readlines())

while someLineNumber > 0:
    for something in r_send:
        # do stuff

    someLineNumber /= 2     # //= 2 in Python 3

    sent.close()
    newFile = cutFile(someFilePath, someLineNumber)
    sent = open(newFile, "r")
    r_send = csv.reader(sent)

Что-то в этом роде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...