0

手順をリストしたテキスト ファイルがあります (たとえば、Web サイトに移動し、リンクをクリックします)。私がやりたいことは[data]、 の手順に従って の各アクションを完了することです[steps]。現在、ファイルを抽出するメカニズムは既にありますが、各ステップに基づいて各アクションを実行することはできません。

ファイルの解析:

file_name = "testdata.txt"
with open(file_name) as f:
      pre_data,post_data =[s.strip() for s in (f.read()).split("[data]")]
post_data_lines = post_data.splitlines()
headers = post_data_lines[0].split()
headers2 = [s.replace("_"," ").strip() for s in headers]
for line in post_data_lines[1:]:
    tmpline  = []
    pos = 0
    for itm in headers:
        tmpline.append(line[pos:pos+len(itm)])
        pos += len(itm)+1

    print dict(zip(headers2,tmpline))

テキストファイルは次のようになります。

[Steps]
step1 = WebAddress
step2 = Tab
step3 = SecurityType
step4 = Criteria
step5 = Date
Step6 = Click1
step7 = Results
step8 = Download
[data]
WebAddress___________________________ Destination___________ Tab_____________ SecurityType___________________________________________________ Criteria___ Date_______ Click1_ Results_ Download    
https://mbsdisclosure.fanniemae.com/  q:\\%s\\raw\\fnmapool  Advanced Search  Interim MBS: Single-Family                                      Issue Date  09/01/2012  Search  100      CSV XML
https://mbsdisclosure.fanniemae.com/  q:\\%s\\raw\\fnmapool  Advanced Search  Preliminary Mega: Fannie Mae/Ginnie Mae backed Adjustable Rate  Issue Date  09/01/2012  Search  100      CSV XML
https://mbsdisclosure.fanniemae.com/  q:\\%s\\raw\\fnmapool  Advanced Search  Preliminary Mega: Fannie Mae/Ginnie Mae backed Fixed Rate       Issue Date  09/01/2012  Search  100      CSV XML
4

2 に答える 2

0

以下のすべての擬似コード...

これはあなたがやろうとしていることですか?

class StairMaster(object):
    def step1(self,data):
        pass
    def step2(self,data):
        pass

for line in testdata_dicts:
    dispatcher = StairMaster()
    for i in range(1,8):
        step = "step%s" % i
        data = line[step]
        result = getattr( dispatcher , step )( data )

またはこれはあなたがやろうとしていることですか:

instructions = dict( 'what the steps are' )
for line in testdata_dicts:
    for i in range(1,MAX_STEPS):
        step = "step%s" % i 
        if instructions[step] == 'DOWNLOAD':
            download()
        elif instructions[step] == 'UPLOAD':
            upload()
        ...
于 2012-08-31T14:29:31.020 に答える
0

コードがどのように壊れるかは言わないでください。それは役に立ちました。

私はあなたのコードが何をするかを確認しようとしましたが、列の読み取り方法が 3 桁ずれていることを確認しました。これ\\は、各行に 3 つあるためです。しかし、あなたが提供した入力テキストが正確で、実際にこのテキストになってしまうかどうかはわかりません。お知らせ下さい。

...
header_names = [s.replace("_"," ").strip() for s in headers]
for line in post_data_lines[1:]:
    columns  = []
    column_start = 0
    print 'line %r.' % line
    for header in headers:
        column = line[column_start:column_start+len(header)]
        print 'read column %r.' % column
        print 'used header %r.' % header
        columns.append('%s' % column)
        column_start += len(header) + 1
    break

これは以下を出力します:

https://mbsdisclosure.fanniemae.com/  q:\%s\raw\fnmapool  Advanced Search  Interim MBS: Single-Family                                      Issue Date  09/01/2012  Search  100      CSV XML
read column 'https://mbsdisclosure.fanniemae.com/ '.
used header 'WebAddress___________________________'.
read column 'q:\\%s\\raw\\fnmapool  Ad'.
used header 'Destination___________'.
read column 'anced Search  In'.
used header 'Tab_____________'.
read column 'erim MBS: Single-Family                                      Is'.
used header 'SecurityType___________________________________________________'.
read column 'ue Date  09'.
used header 'Criteria___'.
read column '01/2012  Se'.
used header 'Date_______'.
read column 'rch  10'.
used header 'Click1_'.
read column '      CS'.
used header 'Results_'.
read column ' XML'.
used header 'Download'.

2 列目から 3 文字ずれていることがわかります。

これを修正する方法は、ファイルに書き込まれた Destination ヘッダーを 3 つのアンダースコアで短くすることです。

Destination___________
Destination________
于 2012-09-01T00:27:13.550 に答える