파이썬에서 for loop으로 csv 파일을 읽고 저장한 리스트를 다른 csv 파일로 만들면 행이 늘어나는 문제


하나의 열로 이루어진 CSV 파일을 다음과 같이 for loop 으로 읽고 다른 CSV 파일을 만들 경우 , 를 기준으로 나뉘어져서 행이 늘어납니다. 각 행의 글자 수와 빈 칸 (띄어쓰기)의 수를 세려고 합니다.

file = "C:/" # 파일
with open("C:/",'w',encoding='cp949',newline='') as testfile: # 새로 쓸 파일
    csv_writer=csv.writer(testfile)
    with open(file,'r') as fi:
            for each in fi:
                file=each
                linecount=count_letters(file)
                lst=[file]+[linecount]
                csv_writer.writerow(lst)

원래 8만개의 행이 5천개 정도 더 늘어납니다. 다음과 같이 바꾸어 보았습니다.

input_fileName = "" 
output_fileName = "" 

f = open(input_fileName, 'r')
out_list = []
buf = ''
flg = 0
for line in f:
    if line.count('"')%2 == 1:
        if flg == 0: flg = 1
        else: flg = 0
    if flg == 1: buf += line.strip(' \n')
    elif flg == 0 and len(buf) > 0:
        buf += line.strip(' \n')
        buf = buf.strip(' "')
        out_list.append([buf,len(buf)])
        buf = ''
    else:
        line = line.strip(' \n')
        out_list.append([line,len(line)])
f.close()

of = open(output_fileName, 'w')
for each in out_list:
    print(each[0]+','+str(each[1]), file=of)
of.close()

이 경우, 행이 늘어나지 않지만 열로 늘어납니다. 어떤식으로 고쳐야 ,를 기준으로 늘어나지 않고 정상적으로 읽을 수 있을까요? 구분자는 , 가 데이터안에 있기에 사용할 수 없는 상황입니다.


위의 코드에서 열이 더 생기는 것을 고치는 방법을 못찾아서 열이 늘어난 200개의 행에 대해 코딩없이 그 부분만 파일 자체를 고치려고 합니다. 각 줄의 길이는 위의 코드로 읽으려고 하고, 위의 코드에서 이부분을추가해서 특수문자를 읽으려면 어떻게 고쳐야 할까요?

regex = "[^가-힣a-zA-Z0-9\n ]" 
search_target = line
            result=re.findall(regex,search_target)
            if result != []:
                list1=[line]+result
            else :
                list1=[line]
            csv_writer.writerow(list1)

그리고 공백의 여부를 찾는 코드는 어떤식으로 작성을 하면 될까요? ' ' 를 count 하면 될까요?

  • 2017년 08월 13일에 작성됨

  • 차리리 하려는 것(목적)을 상세히 기술하고 처리해야할 샘플데이터를 올리세요. 그편이 낫습니다. 질문자가 제시한 코드를 분석하여 하고자 하는 바를 알아내는 것은 더 어렵습니다.    정영훈   2017.8.14 03:32     
  • @정영훈 샘플데이터는 어떻게 올릴 수 있나요?    김도훈   2017.8.14 03:56     
  • @정영훈 질문은 수정해보았습니다    김도훈   2017.8.14 04:18     
  • 질문으로 문제가 되는 행의 raw 데이터를 올리시면 되지 않을까요?    정영훈   2017.8.14 12:18     
조회수 47


Kakao codefestival banner

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close