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

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

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

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Python 3.x

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

Q&A

解決済

2回答

275閲覧

python csvからmysql 余計な文字 排除

syu-yu

総合スコア24

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Python 3.x

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

0グッド

3クリップ

投稿2018/04/20 15:40

概要
os:mac
sql:mysql 5.7

csvから読み込んだ際に、不必要な文言を削除または、mysqlに必要な文言だけ入れたいです。
csvファイルを以下のように

with connection.cursor() as cursor: path = os.getcwd() + str(number) +".csv" f = open(path, 'r') dataReader = csv.reader(f) for row in dataReader: name = row[1] sql = 'insert into personal (id,name) values (%s, %s)' cursor.execute(sql,(None,name)) ``` にてmysqlに入れました。 (以下入れた形) 名前(header) --------------------| タカハシ(注)2| --------------------| ワタナベ(注)3| --------------------| (遅1)ヤマダ  | --------------------| 名前 | --------------------| (遅)タナカ(注)4 | --------------------| 以下省略 したいこととしては、 名前 -------------| タカハシ | -------------| ワタナベ | --------------| ヤマダ   | --------------| タナカ | --------------| 以下省略 のように、(注) や(遅)、途中に入っている名前を取り除いた形にしたいです。 可能性のあるパターンをreplaceで置き換える方法くらいしか思いつきません。 よろしくお願いします。

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

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

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

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

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

guest

回答2

0

MySQLだと正規表現を使った置換ができないらしいので、Pythonでやるしかなさそうです。
Python初心者なので無理やりですが、コードを書きました。
書かれていたパターンには対応できているはずなので、後はこれを参考に手を加えていってください。

Python

1import re 2

name = row[1]
【この部分に以下コードを追加(インデントは正しく入れてください)】
sql = 'insert into personal (id,name) values (%s, %s)'

Python

1name = name.replace('(', '(').replace(')', ')') 2data = [] 3data.append(re.match(r'(.+)(.*)(.+)', name)) 4data.append(re.match(r'(.+)(.*)', name)) 5data.append(re.match(r'(.*)(.+)', name)) 6### 新たなパターンに対応させたい場合は、この位置にコードを追加する ### 7data.append(re.match(r'(.*)', name)) 8 9name = next((item for item in data if item), None).group(1) 10if name == '名前': 11 continue

投稿2018/04/25 15:08

編集2018/04/25 15:28
miyu21

総合スコア111

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

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

miyu21

2018/04/25 15:35 編集

5日間近く回答が付いていなかったので、初心者でしたが回答しました。 素晴らしい回答が付けられた方がいらっしゃるので、ぜひそちらを参考になさってください。
guest

0

ベストアンサー

持ってるデータのすべてに対応できるかはちょっとわかりませんが、駄目だったらre.subの正規表現をいじってください。

python

1import re 2 3data = ["タカハシ(注)2", 4 "ワタナベ(注)3", 5 "(遅1)ヤマダ", 6 "名前", 7 "(遅)タナカ(注)4"] 8print(data) 9# => ['タカハシ(注)2', 'ワタナベ(注)3', '(遅1)ヤマダ', '名前', '(遅)タナカ(注)4'] 10 11data = [x for x in data if x != "名前"] # 名前は先に除去しとく 12 13data = [re.sub(r"(.*?)[0-90-9]*|(.*?)[0-90-9]*", "", x) 14 for x in data] 15 16print(data) 17# => ['タカハシ', 'ワタナベ', 'ヤマダ', 'タナカ']

投稿2018/04/25 15:29

hayataka2049

総合スコア30933

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

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

syu-yu

2018/05/11 02:32

大変遅くなり申し訳ありません。。 ご回答有難うございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問