2017-07-27 13 views
0

私はさまざまな企業のデータを含む 'CompanyData'というテーブルを持っています。私は各企業名に対応するファイルにデータを格納する必要があります。pythonでデータベースデータに基づいてファイルを作成する方法は?

import os 
import pymysql 

user = '***' 
password = '***' 
host = '***' 
db= '***' 

connection = pymysql.connect(host, user, password, db) 
cursor = connection.cursor() 
query = "select * from CompanyData" 
cursor.execute(query) 
results = cursor.fetchall() 
for value in results: 
    filename = "{}.txt".format(value[4]) 
    if os.path.isfile(filename) 
     fh = open(filename, 'w') 
    string1 = "{}-{}-{}\n".format(value[1], value[2], value[3]) 
    if 'fh' in locals(): 
     fh.write(string1) 

1は、問題を理解できるように、私はここに私の問題を簡素化しています:

の列がどのように私ができるのPython

マイ試しを使用して問題を解決することができます

c_emp_id, name, ph, email, company_name, country 

です。

答えて

3

ここにはpandasを使用する解決策があります。キーは、会社名でデータをグループ化し、各グループを別のファイルに保存することです。この例では

import pandas as pd 
df = pd.DataFrame({'name': ['A', 'B', 'C'], 'company': ['AAA', 'BBB', 'AAA']}) # Example of data 

#  company name 
# 0  AAA A 
# 1  BBB B 
# 2  AAA C 

groups = df.groupby('company') 
for company, group in groups: 
    group.to_csv('{0}.txt'.format(company), sep='-') 

、2つのファイルが作成されます。AAA.txtBBB.txt。これらのファイルの内容は次のようになります。

import mysql.connector as sql 
import pandas as pd 

db_connection = sql.connect(host='hostname', database='db_name', user='username', password='password') 
df = pd.read_sql('SELECT * FROM table_name', con=db_connection) 
+0

私はpandasモジュールを使用していません。私のデータ__results__を__pandasデータフレーム_に変換/変換する方法を教えてください。 – Arijit

+0

@Arijit私の新しい答えを見てください(動作するはずですが、テストしていません) –

+0

出力ファイルで、カンマ区切りの列がすべて取得されています。しかし、私は出力をフォーマットする必要があります。 __string1 = "{} - {} - {} \ n" .format(値[1]、値[2]、値[3]))__のように。これで私を助けてもらえますか? – Arijit

1

私は:

-company-name 
0-AAA-A 
2-AAA-C 

-company-name 
1-BBB-B 

パンダのデータフレームにMySQLデータベースを変換するために、次の操作を行うことができます"group by"が助けになるかどうかは分かりませんが、私はコードを助けようとすることができます。

まず最初に会社のすべてのデータを収集して書き込みを実行し、「開く」に「with」ステートメントを使用しようとすると、ファイルの終了が処理されます。 " - " 辞書に保存

import os 
import pymysql 

user = '***' 
password = '***' 
host = '***' 
db= '***' 

connection = pymysql.connect(host, user, password, db) 
cursor = connection.cursor() 
query = "select * from CompanyData" 
cursor.execute(query) 
results = cursor.fetchall() 
company_data = {} 

# collect data into a dict 
for value in results: 
    company = value[4] 
    try: 
     current_data = company_data[company] 
     current_data += "\n" + "-".join([value[1], value[2], value[3]]) 
     company_data[company] = current_data 
    except KeyError: 
     current_data = "-".join([value[1], value[2], value[3]]) 

# write the data into the file 
for company, data in company_data.iteritems(): 
    filename = "%s.txt" % company 
    with open(filename, 'w') as fh: 
     fh.write(data) 

中間列(current_data + = "\ n" +の多くを作成することができます。([値[1]、値[2]の値を[3])に参加);以下のリストを使用する方がより良い実装であるかどうかは不明です。

# collect data into a dict 
for value in results: 
    company = value[4] 
    try: 
     current_data = company_data[company] 
     # since lists are mutable we do not need to re-assign this back to dict 
     current_data.append("-".join([value[1], value[2], value[3]]) 
    except KeyError: 
     current_data = "-".join([value[1], value[2], value[3]]) 

# write the data into the file 
for company, data in company_data.iteritems(): 
    filename = "%s.txt" % company 
    with open(filename, 'w') as fh: 
     for line in data: 
      fh.write(line + "\n") 
関連する問題