문제

이것은 이미 답변과 다른 질문입니다. Python의 내장 .CSV Writer 모듈을 사용하여 열을 교체하는 방법은 무엇입니까?]

거대한 Excel .CSV 파일에서 찾기 및 교체 (URL의 한 열에 특유)를 수행해야합니다. 스크립팅 언어를 가르치려고 노력하는 시작 단계에 있기 때문에 파이썬에서 솔루션을 구현하려고 노력했다고 생각했습니다.

항목의 내용을 변경 한 후 .CSV 파일에 다시 쓰려고 할 때 문제가 있습니다. 나는 그것을 읽었다 공식 CSV 모듈 문서 작가를 사용하는 방법에 대해서는이 사건을 다루는 예는 없습니다. 구체적으로, 나는 한 번의 루프로 달성 된 작업을 읽고, 교체하고, 쓰려고 노력하고 있습니다. 그러나 For Loop의 인수와 Writer.writerow ()의 매개 변수로 동일한 '행'참조를 사용할 수 없습니다. 그래서 For Loop을 변경 한 후에는 파일에 어떻게 다시 써야합니까?

편집하다: 나는 S. Lott와 Jimmy의 제안을 구현했지만 여전히 같은 결과입니다.

#2 편집 : S. Lott의 제안에 따라 Open () 함수에 "RB"및 "WB"를 추가했습니다.

import csv

#filename = 'C:/Documents and Settings/username/My Documents/PALTemplateData.xls'

csvfile = open("PALTemplateData.csv","rb")
csvout = open("PALTemplateDataOUT.csv","wb")
reader = csv.reader(csvfile)
writer = csv.writer(csvout)

changed = 0;

for row in reader:
    row[-1] = row[-1].replace('/?', '?')
    writer.writerow(row)                  #this is the line that's causing issues
    changed=changed+1

print('Total URLs changed:', changed)

편집하다: 당신의 참조를 위해 이것은입니다 새로운 통역사의 전체 추적 :

Traceback (most recent call last):
  File "C:\Documents and Settings\g41092\My Documents\palScript.py", line 13, in <module>
    for row in reader:
_csv.Error: iterator should return strings, not bytes (did you open the file in text mode?)
도움이 되었습니까?

해결책

같은 파일을 읽고 쓸 수 없습니다.

source = open("PALTemplateData.csv","rb")
reader = csv.reader(source , dialect)

target = open("AnotherFile.csv","wb")
writer = csv.writer(target , dialect)

모든 파일 조작에 대한 일반적인 접근 방식은 원본 파일의 수정 된 사본을 만드는 것입니다. 파일을 제자리에 업데이트하려고하지 마십시오. 그것은 단지 나쁜 계획입니다.


편집하다

라인에서

source = open("PALTemplateData.csv","rb")

target = open("AnotherFile.csv","wb")

"RB"및 "WB"는 절대적으로 필요합니다. 당신이 그것들을 무시할 때마다, 당신은 잘못된 형식으로 읽기 위해 파일을 열어줍니다.

.CSV 파일을 읽으려면 "RB"를 사용해야합니다. Python 2.X는 선택의 여지가 없습니다. Python 3.x를 사용하면 이것을 생략 할 수 있지만 "r"을 명시 적으로 사용하여 명확하게하십시오.

.CSV 파일을 작성하려면 "WB"를 사용해야합니다. Python 2.X는 선택의 여지가 없습니다. Python 3.x를 사용하면 "W"를 사용해야합니다.


편집하다

Python3을 사용하는 것 같습니다. "RB"및 "WB"에서 "B"를 떨어 뜨려야합니다.

이것을 읽으십시오 : http://docs.python.org/3.0/library/functions.html#open

다른 팁

이진으로 CSV 파일을 열는 것은 잘못된 것입니다. CSV는 일반 텍스트 파일이므로

source = open("PALTemplateData.csv","r")
target = open("AnotherFile.csv","w")

오류

_csv.Error: iterator should return strings, not bytes (did you open the file in text mode?)

이진 모드로 열기 때문에옵니다.

Python으로 Excel CSV를 열 때 다음과 같은 것을 사용했습니다.

try:    # checking if file exists
    f = csv.reader(open(filepath, "r", encoding="cp1250"), delimiter=";", quotechar='"')
except IOError:
    f = []

for record in f:
    # do something with record

그리고 그것은 다소 빠르게 작동했습니다 (나는 각 CSV 파일에 약 10MB를 열었지만 3.0 버전이 아닌 Python 2.6 으로이 작업을 수행했습니다).

Python 내에서 Excel CSV 파일로 작업하기위한 작업 모듈은 거의 없습니다. pyexcelerator 그들 중 하나입니다.

문제는 읽고있는 것과 동일한 파일에 쓰려고하는 것입니다. 다른 파일에 쓰고 원본을 삭제 한 후 이름을 바꿉니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top