2010-07-12 3 views
0

나는 csv 파일을 여러 번 읽지 만, 통과 할 때마다 크기를 줄인다. 그래서 일단 바닥에 도달하면, .csv 파일의 아래쪽 절반 인 새로운 CSV 파일을 작성하고 있습니다. 그런 다음 csv 판독기를 변경하여이 새 파일을 대신 사용하고 싶지만 작동하지 않는 것 같습니다 ... 여기에 제가 한 일이 있습니다. cutFile가하는파이썬의 .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) 

..

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" 

왜이 작동하지 않습니다?

+0

그 중 어떤 부분이 작동하지 않는 것 같습니까? 어떤 오류 메시지가 나타 납니까? 또한, 루프의 일종의 코드의 상단 부분입니까? – Wilduck

답변

1
  1. 어떤 종류의 루프에서입니까? something = r_send.next()? 당신이 쓴대로, 그것은 단지 한 줄을 읽을 것입니다.
  2. ",".join(line)이 필요합니까? 단순히 line 자체를 인쇄하면됩니다.
  3. 더하기 파일을 닫기 전에 실제로는 seek(0)이 필요 없습니다.
+0

@ ahhh의 문제에 대한 답변은 있습니까? 이것은 저에게 코멘트에서이어야 한 ㄴ다는 것을 보인다. – Wilduck

+0

@Wilduck - 나는 당신의 방식이 더 교육적인 것에 동의합니다. 귀하의 질문에 관하여 : (1)은 설명입니다. (2)은 실제 답변입니다 (내가 보는 한). (3)은 코드에 대한 일반적인 관찰입니다. 그럼 – adamk

+0

좋은 공연. upvote을하십시오. – Wilduck

0

나는 다음과 같은 제안 :

사용 for something in r_send:보다는 something = r_send.next(); 당신은 try ... except 블록이 필요하지 않을 것입니다. 여러분은 루프 밖에서 원래 파일을 닫는 것만 둡니다. (다른 사람이 언급했듯이, 현재 코드에서 원래 파일을 반복하지 않습니다.) . 그런 다음 아마 모든 것을 다른 루프로 감싸서 파일이 완전히 조작 될 때까지 계속 반복 할 것입니다.

print >> new_sent, ",".join(line) 대신 new_sent.write(line)을 사용하십시오. 파일에 쓸 때 csv 모듈을 사용하지 않으므로 ",".join 비트 이외의 다른 점이 많지는 않습니다.하지만 어쨌든 여기서는 사용하면 안됩니다. 파일을 더 분명히 쓰고 있다는 사실. 그래서

... 그런

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) 

뭔가.

관련 문제