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

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

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

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Q&A

解決済

1回答

1837閲覧

winrm経由で取得した結果の整形

JunMatsumoto

総合スコア76

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

0グッド

0クリップ

投稿2016/04/29 07:42

python勉強中です。
python2.7のwinrmモジュールを使い、Windowsサーバー上のSqlサーバーにコマンド実行させ、結果を取得したいと考えています。

※SQL Serverのバックアップ結果を取得するスクリプトになります。

取得した際に、連続したスペースが大量に挿入されている為、これを見やすく整形したいです。
どのようにすれば良いか、アドバイスをお願いします。

###該当のソースコード

sql_query ='"SELECT TOP 100 '
's.database_name,'
'm.physical_device_name, '
'CAST(CAST(s.backup_size / 1000000 AS INT) AS VARCHAR(14)) + ' ' + 'MB' AS bkSize, '
's.backup_start_date, '
's.backup_finish_date '
'FROM msdb.dbo.backupset s '
'INNER JOIN msdb.dbo.backupmediafamily m '
'ON s.media_set_id = m.media_set_id '
'ORDER BY backup_start_date DESC, backup_finish_date"'

for i in range(0,x) :
host = Hostname[i]
os_user = OS_User[i]
os_password = OS_Password[i]
sql_user = SQL_User[i]
sql_password = SQL_Password[i]
command = 'sqlcmd.exe -U {dbuser} -P {dbpass} -S . -Q {query} -h -1'.format(dbuser=sql_user,dbpass=sql_password,query=sql_query)
print command
p2 = Winrm_connect( host, os_user, os_password, command )
lines = (p2.Command().replace('\n\r\n',''))

print lines

###現在の結果(抜粋)
DB名1 \PATH‗TO\DB名1_2016_04_29_130000_9278930.bak 14 MB 2016-04-29 13:00:18.000 2016-04-29 13:00:18.000
DB名1 \PATH‗TO\DB名_backup_2016_04_29_130000_9278930.bak 2 MB 2016-04-29 13:00:18.000 2016-04-29 13:00:18.000

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

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

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

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

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

guest

回答1

0

ベストアンサー

現在の結果をtxtにいれた状態で、正規表現でスペース以外を取り出してみました。
実際のデータにはどこかに改行が入っていると思いますので、手直してください。

DB名1 \PATH‗TO\DB名1_2016_04_29_130000_9278930.bak 14 MB 2016-04-29 13:00:18.000 2016-04-29 13:00:18.000
DB名1 \PATH‗TO\DB名_backup_2016_04_29_130000_9278930.bak 2 MB 2016-04-29 13:00:18.000 2016-04-29 13:00:18.000

python

1 2# -*- coding: utf-8 -*- 3 4txt=u"""DB名1 \\PATH‗TO\DB名1_2016_04_29_130000_9278930.bak 14 MB 2016-04-29 13:00:18.000 2016-04-29 13:00:18.000 DB名1 \\PATH‗TO\DB名_backup_2016_04_29_130000_9278930.bak 2 MB 2016-04-29 13:00:18.000 2016-04-29 13:00:18.000""" 5 6p = re.compile(r'\s+') 7lst = p.split(txt) 8for cnt,item in enumerate(lst): 9 print item,'', 10 if cnt-7 ==0: 11 print

投稿2016/04/29 13:22

lightson

総合スコア553

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

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

JunMatsumoto

2016/04/30 02:27

ありがとうございます! やってみます!
JunMatsumoto

2016/04/30 02:40

頂いた内容を元に、サブリスト化しました ありがとうございました! p = re.compile(r'\s+') lst = p.split(lines) group_by = 8 result = [lst[i:i + group_by] for i in range(0, len(lst), group_by)] for cnt , item in enumerate(result): print result[cnt]
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問