質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

424閲覧

Python テキストをcsvへ書き込み

fideo

総合スコア55

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2022/03/03 09:30

編集2022/03/03 10:20

Pythonでテキストファイルで取得した投稿内容を
csvファイルへ書き込みたいです。
投稿日時を書き込みできますが、
テキストファイルで取得したテキストデータをCSVへ空白として書き込みされます。

空白として書き込まれないようにするにはどのように変更すれば良いでしょうか。
もし分かる方がいましたら教えて頂けると助かります。

お手数ですが、よろしくお願い致します。

実現内容 csv書き込み

投稿日時投稿内容
2022年3月1日テスト投稿TEST#python#code#programinプログラミング簡単コーディングPython簡単pythonできること

現在の結果

投稿日時投稿内容
2022年3月1日

テキストファイル

フォロワー11 コメント5件 Enterキーで投稿します 2022年2月27日 · おはよう! #元気 2022年2月28日 · 本日良い天気 #晴 コメント2件 Enterキーで投稿します 2022年3月1日 · テスト 投稿 TEST #python #code #programin プログラミング 簡単 コーディング Python簡単 pythonできること Enterキーで投稿します 2022年3月2日 · こんにちわ! Enterキーで投稿します 2022年3月3日 · おはようございます! Enterキーで投稿します

テキストファイルで取得したテキストデータ
post出力を csvへ書き込みたいです。

#全てのリストの要素を取り出す for idx in range(len(ids)): post=print(ids[idx]) 2022年3月1日 テスト投稿 TEST #python #code #programin プログラミング 簡単 コーディング Python簡単 pythonできること Enterキーで投稿します

全体コード

import re import pandas as pd #ファイルパステキスト path = r"C:\Users\test\Desktop\test.txt" with open(path, "r", encoding="utf-8") as f: text = f.read() #特定の文字を置換 text = re.sub(r'[ ·\ufeff]', '', text) #ブロックを作成して特定の文字のみ検索 block = re.findall( r'^\d+年\d+月\d+日$(?:(?!^\d+年\d+月\d+日$).)+?Enterキーで投稿します', text, re.DOTALL|re.MULTILINE) #print(block) #新しいリストを作成して改行を削除 New_list = [b.split('\n') for b in block] search_words = ['#python', 'test'] #リスト内にsearch_wordsの文字が含んでいたら表示 for l in New_list: if any(w in l for w in search_words): ids = l #print(ids) #全てのリストの要素を取り出す for idx in range(len(ids)): post=print(ids[idx]) #テキストデータをCSVへ保存 df = pd.DataFrame({"投稿日時":["2022年3月1日"], "投稿内容":[post]}) df = df.set_index('投稿日時') df.to_csv("output_pd.csv", encoding="shift_jis")

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2022/03/03 09:43

どういう内容の出力テキストを、どういうふうに出力したいのかを提示して説明しよう
fideo

2022/03/03 10:21

失礼しました。 詳細な説明を入れました。
guest

回答2

0

search_words を含む投稿が複数ある場合を考慮して、ids をリストにします。

python

1#リスト内にsearch_wordsの文字が含んでいたら表示 2ids = [] 3for l in New_list: 4 if any(w in l for w in search_words): 5 ids.append(l) 6 7#print(ids) 8 9#全てのリストの要素を取り出す 10post = [[idx[0], ''.join(idx[1:-1])]for idx in ids] 11 12#print(post) 13 14#テキストデータをCSVへ保存 15df = pd.DataFrame(post, columns=['投稿日時', '投稿内容']) 16df = df.set_index('投稿日時') 17 18#print(df) 19df.to_csv("output_pd.csv", encoding="shift_jis")

output_pd.csv

csv

1投稿日時,投稿内容 22022年3月1日,テスト投稿TEST#python#code#programinプログラミング簡単コーディングPython簡単pythonできること

投稿2022/03/04 03:10

melian

総合スコア19769

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fideo

2022/03/17 06:50

回答ありがとうございます。 遅くなりすいません、この方法も参考いたします。
guest

0

ベストアンサー

post=print(ids[idx])
この書き方を見たことがないです。
以下のように書き換えたらそれっぽくは動作しました。
(コードを全て見ていないので細かい調整はよろしくお願い致します)

python

1import re 2import pandas as pd 3 4# ファイルパステキスト 5path = "test.txt" 6 7with open(path, "r", encoding="utf-8") as f: 8 text = f.read() 9 10# 特定の文字を置換 11text = re.sub(r'[ ·\ufeff]', '', text) 12 13# ブロックを作成して特定の文字のみ検索 14block = re.findall( 15 r'^\d+年\d+月\d+日$(?:(?!^\d+年\d+月\d+日$).)+?Enterキーで投稿します', 16 text, re.DOTALL|re.MULTILINE) 17 18# print(block) 19 20# 新しいリストを作成して改行を削除 21New_list = [b.split('\n') for b in block] 22search_words = ['#python', 'test'] 23 24# リスト内にsearch_wordsの文字が含んでいたら表示 25for l in New_list: 26 if any(w in l for w in search_words): 27 ids = l 28 29# print(ids) 30 31# 全てのリストの要素を取り出す 32for idx in range(len(ids)): 33 # post = print(ids[idx]) 34 post = ids[idx] 35 print(f'post:{post}') 36 37# テキストデータをCSVへ保存 38 39df = pd.DataFrame({"投稿日時": ["2022年3月1日"], 40 "投稿内容": [''.join(ids)]}) 41 42df = df.set_index('投稿日時') 43df.to_csv("output_pd.csv", encoding="shift_jis") 44

投稿2022/03/03 16:48

kyokio

総合スコア560

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fideo

2022/03/17 06:51

回答ありがとうございます。 こちらが一番分かりいので、ベストアンサーにしました。 すいません、遅くなりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問