2

我有一个文件,我需要将某些内容写入新文件。

目前的内容如下:

send from @1373846594 to pool/10.0.68.61@1374451276 estimated size is 7.83G
send from @1374451276 to pool/10.0.68.61@1375056084 estimated size is 10.0G

我需要新文件来显示:

@1373846594 --> pool/10.0.68.61@1374451276 --> 7.83G
@1374451276 --> pool/10.0.68.61@1375056084 --> 10.0G

我努力了:

with open("file", "r") as drun:
    for _,_,snap,_,pool_,_,_,size in zip(*[iter(drun)]*9):
        drun.write("{0}\t{1}\t{2}".format(snap,pool,size))

我知道我要么离开了,要么只是不完全在那里,但我不确定下一步该去哪里。任何帮助,将不胜感激。

4

4 回答 4

1

您想使用拆分str.split(),您需要先写入另一个文件,然后将其移回原位;读取和写入同一个文件很棘手,除非您使用固定的记录大小,否则应避免使用。

但是,该fileinput模块使就地文件编辑变得足够容易:

import fileinput

for line in fileinput.input(filename, inplace=True):
    components = line.split()
    snap, pool, size = components[2], components[4], components[-1]
    print '\t'.join((snap,pool,size))

print语句写入 to sys.stdout,它在设置fileinput时方便地重定向inplace=True。这意味着您正在写入输出文件(替换原始输入文件),也在每个循环上写入一个额外的换行符。

于 2013-08-14T10:28:36.727 回答
0
inf = open(file)
outf = open(outfile,'w')
for line in inf:
    parts = line.split()
    outf.write("{0}-->{1}-->{2}".format(parts[2], parts[4], parts[8]))

inf.close()
outf.close()
于 2013-08-14T10:31:08.403 回答
0
SOURCE, DESTINATION, SIZE = 2, 4, 8    
with open('file.txt') as drun:
    for line in drun:
        pieces = line.split()
        print(pieces[SOURCE], pieces[DESTINATION], pieces[SIZE], sep=' --> ', file=open('log.txt', 'a'))
于 2013-08-14T11:57:47.270 回答
0

使用正则表达式模式匹配可能很简单:

with open('output_file', 'w') as outFile:
    for line in open('input_file'):
        line = line.split()
        our_patterns = [i for i in line if re.search('^@', i) or \
                                           re.search('^pool', i) or \
                                           re.search('G$', i)]

        outFile.write(' --> '.join(our_patterns) + '\n')

@模式匹配将提取以或开头的任何部分,pool以及以 结尾的最终大小G。然后将这些部分与 连接-->并写入文件。希望这可以帮助

于 2013-08-14T10:42:02.847 回答