2016-06-27 3 views
0

현재 API에서 데이터를 가져오고 있으며이 데이터를 CSV로 저장하려고합니다.왜 csv 파일의 일부 행 형식이 잘못 되었습니까?

그러나 일부 줄은 항상 유효하지 않으므로 Excel의 텍스트 줄 기능을 통해 줄을 나눌 수 없습니다. 다음과 같이

나는 CSV 파일을 만들 : Excel에서 CSV 파일을 열 경우 즉시 행이 무효라고 볼

with open(directory_path + '/' + file_name + '-data.csv', 'a', newline='') as file: 
    # Setup a writer 
    csvwriter = csv.writer(file, delimiter='|') 

    # Write headline row 
    if not headline_exists: 
     csvwriter.writerow(['Title', 'Text', 'Tip']) 

    # Build the data row 
    record = data['title'] + '|' + data['text'] + '|' + data['tip'] 

    csvwriter.writerow([record]) 

invalid csv

. 유효 값은 기본 높이와 전체 폭을 사용하지만 유효하지 않은 값은 높이가 크지 만 너비는 적습니다.

누구든지 그 문제의 원인을 알고 있습니까?

+1

구분 기호로 파이프'| '를 사용하는 것이 탁월한 것처럼 보입니다. 아마 뭔가 다른 것을 사용하고 일을 망가 뜨리려는 것입니다. 또한 csvwriter를 전혀 활용하지 않고 있습니다. 수동으로 행을 작성하고 일반 문자열로 쓰는 것입니다. 'csv'는 사전 매핑과 사전/사전 목록을 제공하고 키를 기반으로 작성하게합니다. 이것이 더 커지면'csv.DictWriter'를보십시오. – Delioth

+1

'record = data [ 'title'] + '|' + 데이터 [ 'text'] + '|' + 데이터 [ '팁']'1 열 3 아닙니다 – Fabricator

답변

0

필자는 텍스트와 팁을 제거해야한다는 것을 알게되었습니다. 때로는 형식을 깨뜨릴 수있는 공백을 포함하기 때문입니다.

또한 나중에 excel dialect을 사용하는 것이 좋습니다. 데이터가 나중에 처리되기 쉽기 때문입니다.

1

행은 유효하지 않지만 당신이하는 것은입니다.

우선 파이프를 구분 기호로 사용합니다.

csvwriter = csv.writer(file, dialect='excel') 

둘째, 다음과 같은 라인을 보려면 :

record = data['title'] + '|' + data['text'] + '|' + data['tip'] 
csvwriter.writerow([record]) 
그것의 일부 시나리오에서 좋은,하지만 당신은 엑셀에로드 할 사실은 바로이 "excel" dialect의 데이터를 내보낼 나에게 현명한 것 같다 주어

이 방법을 사용하면 기본적으로 csv 작성자에게 파이프가있는 단일 열이 필요하다고 말합니다. csv 작성자를 사용하는 경우 구분 기호를 직접 연결해서는 안되며 작성자를 사용하는 지점이 무효화됩니다. 따라서 이것이 어떻게해야하는지입니다 :

record = [data['title'], data['text'], data['tip']] 
csvwriter.writerow(record) 

희망이 있습니다.

관련 문제