2013-05-31 308 views
1

我知道這是一個簡單的解決,但似乎無法找到它的答案:自動化文本文件,批處理,蟒蛇編輯,無論

我想創建一個批處理文件,在需要的所有文件從ftp服務器每天下載一個文件夾,將它們組合成一個單獨的文件夾,然後根據文件的列(這是給我麻煩的部分)從組合文件中創建新文件。

例如:

我們數據來自於每天在這樣的格式:

DATE/TIME | NodeID | Data  
04/05/2013 11:23:11 |  2  | 10  
04/05/2013 11:23:11 | 3 |  10  
04/05/2013 11:23:11 | 4 |  10  
04/05/2013 11:23:11 | 5 |  10  
04/05/2013 11:23:11  | 6 | 10  
04/05/2013 11:23:11  | 7 |  10  
04/06/2013 11:24:12  | 1 | 12  
04/06/2013 11:24:12  | 1 | 12   
04/06/2013 11:24:12 | 4 |  12   
04/06/2013 11:24:12  | 1  | 12   
04/06/2013 11:24:12  | 3 |  12   
04/06/2013 11:24:12  | 2 | 12 

我要的是把所有節點ID 1行,並把它們放在一個單獨的文件,所有的行在NodeID 2在一個單獨的文件等...

我對python的知識非常有限,但我願意在任何事情上做到這一點。

回答

0

我沒有測試過,但是這可能是工作:

with open('your/file') as file: 
    line = file.readline() 
    while line: 
     rows = line.split('|') 
     with open(rows[1].strip() + '.txt', 'a') as out: 
      out.write(line) 
     line = file.readline() 
+0

感謝您的幫助,非常感謝,還有,我怎樣才能改變文件夾路徑文件被寫入? – camdenl

+0

其實,它似乎跳過了很多條目,有什麼想法? – camdenl

+0

我測試了它,對我來說它似乎沒有跳過任何代碼。 如果您將第5行從 ''打開(行[1] .strip()+'.txt','a')如下:' 至: '你的/目標/文件夾'+ rows [1] .strip()+'.txt','a')如下:'注意路徑是相對於當前工作目錄而不是te腳本。 – Kritzefitz

1
@ECHO OFF 
SETLOCAL enabledelayedexpansion 
DEL noderesult*.txt 2>nul 
FOR /f "skip=1tokens=1,2*delims=|" %%i IN (logfile.txt) DO (
SET node=%%j 
SET node=!node: =! 
>>noderesult!node!.txt ECHO(%%i^|%%j^|%%k 
) 

應該做的工作,生產noderesult?.txt - 注意 - DEL行刪除所有現有noderesult*.txt

+0

我將它保存爲批處理文件並運行它嗎? – camdenl

+0

也許工作更好的方式... :) – Magoo

0

嘗試以下操作:

f_in = "path_to_your_file" 
f = open(f_in,'r') 

f_out = {} 

for l in f: 
    if l != '\n': 
    row = l.split('|') 
    id = int(row[1]) 
    if id not in f_out: 
     f_out[id] = open(f_in + "_" + str(id),'w') 
    f_out[id].write(l) 
+0

我收到此錯誤消息:_ValueError:無效的文字爲int()與基10:'NodeID'_ – camdenl

+0

也許這意味着在某行的NodeID單元格中與整數不同的東西。嘗試調試,例如通過在每次迭代中打印行[1]的內容:'print row [1]' – Miquel

+0

您可以省略整數轉換並替換簡單命令的轉換以刪除奇怪的符號:'id = row [1] .strip()',就像在Ich的答案中一樣... – Miquel