使用批处理、python等自动化文本文件编辑

使用批处理、python等自动化文本文件编辑,python,text,batch-file,automation,Python,Text,Batch File,Automation,我知道这是一个简单的解决方案,但似乎找不到答案: 我正在尝试创建一个批处理文件,该文件将每天从ftp服务器下载的文件夹中的所有文件合并到一个单独的文件夹中,然后根据文件列从合并的文件中生成新文件(这是给我带来麻烦的部分) 例如: 我们每天都会收到如下格式的数据: DATE/TIME | NodeID | Data 04/05/2013 11:23:11 | 2 | 10 04/05/2013 11:23:11 | 3 | 10

我知道这是一个简单的解决方案,但似乎找不到答案:

我正在尝试创建一个批处理文件,该文件将每天从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
我想要的是将所有带有NodeID 1的行放在一个单独的文件中,所有带有NodeID 2的行放在一个单独的文件中,等等

我在python方面的知识非常有限,但我愿意在任何方面都这样做

@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

应执行此项工作,生成
noderesult?.txt
-警告-删除
DEL
行删除所有现有的
noderesult*.txt

尝试以下操作:

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)
请尝试以下操作:

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)

我没有测试它,但这可以工作:

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()

我没有测试它,但这可以工作:

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()


我收到以下错误消息:ValueError:invalid literal for int(),以10为基数:“NodeID”可能意味着在某行的NodeID单元格中,您有一些与整数不同的内容。尝试调试,例如,通过在每次迭代中打印第[1]行的内容:
print row[1]
您可以操作整数转换,并将转换替换为一个简单的命令,以删除奇怪的符号:
id=row[1].strip()
,就像在Ich的回答中一样……我收到以下错误消息:ValueError:invalid literal for int()以10为基数:“NodeID”可能意味着在某行的NodeID单元格中,您有一些与整数不同的内容。尝试调试,例如,在每次迭代中打印第[1]行的内容:
print row[1]
您可以使用整数转换,并用一个简单的命令替换转换,以删除奇怪的符号:
id=row[1].strip()
,就像在Ich的回答中一样……谢谢您的帮助,也非常感谢,如何更改文件写入的文件夹路径?实际上,它似乎跳过了很多条目,有什么想法吗?我测试过它,对我来说,它似乎没有跳过任何条目。如果将第5行从带打开的
(行[1].strip()+'.txt',a')切换为带打开的
(/target/folder'+行[1].strip()+'.txt',a'),则可以更改目标文件夹as out:
请注意,路径是相对于当前工作目录的,而不是相对于te脚本的。对于跳过的行:似乎您使用的是windows,而我使用的是Linux/GNU。可能是操作系统相关的。就像模式的含义一样。我实际上最终使用了.csv模块,但这个答案让我思考。谢谢你的帮助,真的很感谢,还有,我怎样才能更改文件写入的文件夹路径?实际上,它似乎跳过了很多条目,有什么想法吗?我测试了它,对我来说,它似乎没有跳过任何条目。如果将第5行从带打开的
(行[1].strip()+'.txt',a')切换为带打开的
(/target/folder'+行[1].strip()+'.txt',a'),则可以更改目标文件夹as out:
请注意,路径是相对于当前工作目录的,而不是相对于te脚本的。对于跳过的行:似乎您使用的是windows,而我使用的是Linux/GNU。可能是操作系统相关的。就像模式的含义一样。我实际上最终使用了.csv模块,但这个答案让我思考。谢谢我是否将此保存为批处理文件并运行它?我是否将此保存为批处理文件并运行它?