2017-04-05 52 views
0

我有一个文本文件作为模型的启动文件。它看起来像这样:n次读写行

foo1 
foo2 
bar, foo, yolo 
1, 2, 3 
foo3 
foo4 

第3行是标题,第4行取值,两行都需要重复,具体取决于x的大小。假设x = 3。下面的行不应该被覆盖,而是向下移动。前面的行(foo1 & foo2)是动态生成的,所以不一定只有两行,因此我不能通过它们的索引访问它们!

所以我的文件应该再是这样的:

foo1 
foo2 
bar, foo, yolo 
1, 2, 3 
bar, foo, yolo 
1, 2, 3 
bar, foo, yolo 
1, 2, 3 
foo3 
foo4 

我到目前为止的想法:

initraw = open('fileX.txt', "r") #opening raw file for reading 
initwrite= open('fileY.txt', "w") #opening file for writing 
initline = initraw.readlines() #writing content of raw file into string 

x = 3 

for line in initline: 
    initwrite.writelines(line,) 
    if line.startswith('bar, foo, yolo'): 
     for i in range(x): 
      initwrite.writelines(initline[2]) 
      initwrite.writelines(initline[3]) 

initwrite.close() #closing file 
initraw.close() #closing raw file 

任何建议如何解决此问题?现在,这看起来像这样:

foo1 
foo2 
bar, foo, yolo 
bar, foo, yolo 
1, 2, 3 
bar, foo, yolo 
1, 2, 3 
1, 2, 3 
foo3 
foo4 

所以我需要跳过“bar,foo,yolo”之后的第一行。

+0

不会这样写的'bar'线和'1,2,3'线之间的界限?你应该找到你想要的新行的索引,并使用'insert'将它们添加到'initline'中。 (这是因为'readlines'返回一个字符串列表,而不是一个字符串) –

+0

@PatrickHaugh看到我最后的编辑...是的,你是对的。但是我需要复制这些行之前的行数不是固定的,所以我需要不幸地使用'startswith'。 – GeoEki

回答

0

希望这有助于:

x = 2 
    lines = [[item] for item in initrow.split('\n')] 
    lines[2:4] = lines[2:4] * x 

    print lines 
    #will output [['foo1'], ['foo2'], ['bar, foo, yolo'], ['1, 2, 3'], ['bar, foo, yolo'], ['1, 2, 3'], ['foo3'], ['foo4']] 
0
initraw = open('fileX.txt', "r") #opening raw file for reading 
initwrite= open('fileY.txt', "w") #opening file for writing 
initline = initraw.readlines() #writing content of raw file into string 

i = 0 
for line in initline: 
    x = 3 
    i =+ 1 
    if line.startswith('bar, foo, yolo'): 
     for x in range(0, x-1): 
      initwrite.writelines(initline[i+1]) 
      initwrite.writelines(initline[i+2]) 
    initwrite.writelines(line)  
initwrite.close() #closing file 
initraw.close() #closing raw file 
+0

我编辑了我的帖子......在您编写回复时发现错误的“继续”自己。尽管如此,仍有一些东西缺失 – GeoEki

+0

已修改,修改了代码中的一些行。现在输出很好。 – X0r

+0

上次回复后的另一个编辑:前面的行是动态生成的,所以行数是随机的!所以我不能通过索引访问它们......抱歉没有立即说明这一点。 – GeoEki