在python中将某些内容从一个文件写入另一个文件

时间:2013-08-14 10:14:57

标签: python zip format

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

目前的内容如下:

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 个答案:

答案 0 :(得分:1)

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

然而,fileinput module使就地文件编辑变得足够简单:

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语句写入sys.stdoutfileinput在设置inplace=True时方便地重定向。这意味着您正在写入输出文件(替换原始输入文件),在每个循环上都写一个奖励换行符。

答案 1 :(得分: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()

答案 2 :(得分: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结尾的最终尺寸。然后将这些部分与-->连接并写入文件。希望这有帮助

答案 3 :(得分: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'))