파이썬에서 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 하면 될까요?
-
(•́ ✖ •̀)
알 수 없는 사용자
댓글 입력