質問: csv.writer(csvfile, lineterminator='\n') writer.writerow(['ツイートID', '投稿日', 'ユーザーID', '内容']) writer.writerow('\n') writer.writerow('{} {} {} {}'.format(tweet['id'], tweet['created_at'], '@'+tweet['user']['screen_name'],tweet['text'])) writer.writerow('\n') #起こりそうな例外のキャッチ except (FileNotFoundError) as e: print(e) except (csv.Error) as e: print(e) ``` ### 試したこと 1 http://ailaby.com/twitter_api/ コチラを参考に、txtファイルでもやろうとしましたが、全て一列で並んだ形になってしまいます。 (txtファイルをExcelで読み込むつもりでやりました) 2 https://qiita.com/koara-local/items/0e56bc1e58b11e4d7a32 https://qiita.com/okadate/items/7b9620a5e64b4e906c42 pandas という物が有効と情報を得たので、コチラを参考に色々と試してみました。 syntax error が出て混乱したので止めました。 ### オマケ 時々、Twitterのデータを収集する際に文字が長いのか切れることがあります。 (Twitter上では 「私は今日、ご飯を食べた」なのに集めると「私は今日、ご飯を...」みたいに) コードは1で上げた【http://ailaby.com/twitter_api/】とまるっきり同じなので そういう仕様なのでしょうか? 現在の状況 ----- umyu様、KojiDoi様、rinren様、LouiS0616様の助けを借り ・csvファイルではなく、txtファイルおよびtsvファイルで出力することに ・full_textを収集することに →そのため、収集面は大丈夫になりました!ありがとうございます。 tsvファイルおよびtxtファイルを作成するところまで出来ました。 今度は、持ってきたfull_txtに改行コード等があることに気が付きました。 (Excelでインポートすると何かごちゃごちゃになるって言っていたのはコレが原因だったみたいです) そのため、改行コードなどを消してしまうために"replace"を使おうと考えました。 中々上手くできないので、申し訳ありませんが、どなたかご教授頂けますと幸いです。 ``` f.write(tweet['full_text'.replace('\r\n', '')]) ``` というように書いたのですが、やはりツイートデータ1つ1つに 改行などを削除する様にはできないのですか? 今まで手に入った物は手作業でExcelに打ち込んでいたのですが...流石に数が多くて。
回答: 以下の部分ですが ``` writer.writerow('{} {} {} {}'.format(tweet['id'], tweet['created_at'], '@'+tweet['user']['screen_name'],tweet['text'])) ``` 出力すべきデータをわざわざ単一の文字列にしてwriterowに渡しているのがまずいのではないでしょうか。画面に出力する仕様だった参照元のコード例を文脈を考えずにコピペしているのが敗因と思います。 必要なライブラリを持っていないので試していませんが、たぶん下のような感じではないでしょうか。 ``` writer.writerow([tweet['id'], tweet['created_at'], '@'+tweet['user']['screen_name'],tweet['text']]) ``` あと、カンマ区切りの出力はあまりよろしくありません。本文(ツイート)が"10,000円の買い物をした"といった内容だったときにどうなるか考えてみてください。カンマをエスケープする手もありますが、区切り文字をタブにする(TSVファイルで出力する)のが、より簡単でしょう。 ``` writer = csv.writer(csvfile, lineterminator='\n', delimiter='\t') ```