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

조회수 2442회

하나의 열로 이루어진 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.8.14 03:32
  • @정영훈 샘플데이터는 어떻게 올릴 수 있나요? 알 수 없는 사용자 2017.8.14 03:56
  • @정영훈 질문은 수정해보았습니다 알 수 없는 사용자 2017.8.14 04:18
  • 질문으로 문제가 되는 행의 raw 데이터를 올리시면 되지 않을까요? 정영훈 2017.8.14 12:18

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)