2016-06-27 2 views
0

現在、APIからデータを取得していますが、これらのデータをcsvとして保存したいと考えています。なぜcsvファイルの一部の行に無効な形式がありますか?

ただし、一部の行は常に無効です。つまり、Excelのtext-in-columns機能で分割することはできません。

次のように私は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

ExcelでCSVファイルを開いた場合は、直ちに行が無効であることがわかります。有効なものはデフォルトの高さと全体の幅を取りますが、無効なものは高さは増えますが幅は小さくなります。

誰もがその問題の原因を知っていますか?

+1

デリミタとしてパイプ '|'を使用することに優れているようです。たぶん何か他のものを使用して物を壊そうとしています。さらに、あなたはcsvwriterをまったく利用していません。手動で行を作成し、それらを単純な文字列として記述しています。 'csv'はそれに辞書マッピングと辞書/辞書のリストを与え、キーに基づいて書くことができます。これがはるかに大きくなったら 'csv.DictWriter'を見てください。 – Delioth

+1

'record = data ['title'] + '|' + data ['text'] + '|' + data ['tip'] 'は1列ではありません3 – Fabricator

答えて

0

私は最終的に、フォーマットを破る空白を含むことがあるので、テキストとヒントを取り除かなければならないことを知りました。

また、excel dialectを使用することを推奨しました。これは、後でデータを処理しやすくするためです。

1

行は無効ではありませんが、あなたがしていることはあります。

まず最初に、デリメータとしてパイプを使用します。そのいくつかのシナリオでは罰金、しかし、あなたがExcelにそれをロードすることは、すぐに"excel" dialectにデータをエクスポートするために私には賢明と思われる与えられた:

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

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

第二には、次の行を見て

この方法では、基本的にcsvの作者に、パイプが入った単一の列が必要だと伝えます。 csvライターを使用する場合、区切り文字を自分で連結してはいけません。ライターを使用する点は無効になります。だからこれを代わりに行うべきです:

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

希望に役立ちます。

関連する問題