2013-05-31 145 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