데이터 묶음이있는 CSV가 있고 특정 행과 열의 데이터를 변경해야합니다. 내가 파일을 통해 읽을 수있는 행을 변경하려면, 내가 변경해야 할 데이터를 변경할 수 있지만 메모리에 변경 내용을 커밋하고 CSV 올바르게 다시 쓰기 방법을 알아낼 수 없습니다.Python 2.7 - CSV의 특정 행, 열 편집
다음 코드는 실패하지 않지만 올바르지 않습니다. 변경 한 내용을 열 (col)에 적용하는 대신 변경하려는 행만 복제합니다. 데이터는 변경되지 않았으므로 변경 사항을 원했던 행이 중복되었습니다.
import csv
import re
from tempfile import NamedTemporaryFile
import shutil
csvName = raw_input("Enter the filename: ")
tempfile = NamedTemporaryFile(delete=False)
newSize = 0
newArea = 0
with open(csvName, 'rb') as readCSV, tempfile:
reader = csv.reader(readCSV)
writer = csv.writer(tempfile)
for row in reader:
for col in row:
if col.startswith('Connection:'):
print col
if col.startswith('Size:'):
print "Current", col
newSize = raw_input("Enter new size: ")
newArea = int(newSize)*int(newSize)
col = re.sub('[0-9]+', newSize, col)
writer.writerow(row)
if col.startswith('Area:'):
col = re.sub('[0-9]+', str(newArea), col)
writer.writerow(row)
writer.writerow(row)
shutil.move(tempfile.name, csvName)
이
변경해야 한 비트의 데이터의 예는 다음과 같습니다연결 : D14Conn 유형 : B2B 크기 : 140 기하 : 광장 지역 : 19,600
내 위의 코드는 단순히 새 행을이 데이터에 복제 할 것이고 col에 대한 변경 사항은 커밋되지 않습니다. 아래와 같이
연결 : D14Conn 유형 : B2B 크기 : 140 크기 : 140 기하 : 광장 지역 : 19,600 지역 : 19,600
나는 이것이 내가해야 할 필요가 있다고 생각했다. 그래서, 반복 한 행 번호와 그 행 번호에서 반복 한 행 번호를 추적하고 그 행/열의 값을 변경해야합니다. –
'reader'는 반복 가능한 객체이므로 행 번호를 추적하는 것이 반드시 도움이되지는 않지만 각'row'는 단순히 값의 배열이 될 필요가 없습니다. 따라서보고있는 행의 세 번째 열을 업데이트해야한다면'row [2] = ___'이라고 말하고'writer.writerow (row)'는 업데이트 –
을 반영합니다. 나는 처형에 문제가있다. csvReader가 csv를 Row : Column 형식으로 추적하는 것은 아닙니다. 반복을 추적하면서 다음 코드를 시도하면 열 수를 참조하려는 시도로 인해 "범위를 벗어난리스트 인덱스"오류로 끝납니다 : –