我有一个文件,我需要将某些内容写入新文件。
目前的内容如下:
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))
我知道我要么离开,要么就是不在那里,但我不知道下一步要去哪里。任何帮助将不胜感激。
答案 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.stdout
,fileinput
在设置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'))