2017-07-27 185 views
0

我有一張名爲'CompanyData'的表,其中包含各公司的數據。我需要將數據存儲在與每個公司名稱對應的文件中。如何基於python中的數據庫數據創建文件?

列是

c_emp_id, name, ph, email, company_name, country 

我如何能解決使用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) 

我在這裏簡化了我的問題,使人們可以理解問題。

回答

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='-') 

在這個例子中,兩個文件將被創建:AAA.txtBBB.txt。這些文件的內容將是:

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

-company-name 
1-BBB-B 

爲了你的mysql數據庫轉換爲大熊貓數據框,您可以執行以下操作:

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

我還沒有使用熊貓模塊。那麼你能告訴我怎樣才能把我的數據__結果___轉換成__數據框___。 – Arijit

+0

@Arijit看到我的新答案(這應該工作,但我沒有測試過) –

+0

在輸出文件中,我得到所有逗號分隔的列。但我需要格式化輸出。如__string1 =「{} - {} - {} \ n」.format(value [1],value [2],value [3]))__。你能幫我解決這個問題嗎? – Arijit

1

我是不確定「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")