2014-10-14 3 views
-2

Я хочу изменить одну строку в моем 10 текстовый файл с помощью питона я сделал это, но это не работаетизменить содержание всех скопированных файлов с помощью питона

for i in range (2,11): 
    shutil.copyfile("as-1.txt","as-%d.txt"%i) 
    f=open("as-1.txt",'r') 
    for line in f: 
     if line.contains('init.in'): 
      newline = line.replace('init.in', 'init.in%d'%i-1) 

я сделал это таким образом, слишком

for i in range (2,11): 
    shutil.copyfile("as-1.txt","as-%d.txt"%i) 
    f=open("as-1.txt",'r') 
    f.find("init.in") 
    f.replace("init.in", "init.in%d"%i-1) 

, но они оба не работают

+1

Что означает «не работает»? Вы сохраняете файл после операций? – Leistungsabfall

+0

Да, я сделал, но он не дает правильного вывода ... –

+1

Итак, каков фактический результат и какой ожидаемый результат? – Leistungsabfall

ответ

0

для добавления в каждом вновь скопированный файл в init.in линии ее номер (минус один):

#!/usr/bin/env python 
from __future__ import print_function 
import fileinput 
import shutil 

needle = 'init.in' 
for i in range(2, 11): 
    haystack = "as-%d.txt" % i 
    shutil.copyfile("as-1.txt", haystack) 
    for line in fileinput.input(haystack, inplace=True): 
     print(line.replace(needle, needle + str(i - 1)), end='') 
1

Как об этом:

for i in range(2, 11): 
    with open("as-1.txt", 'r') as fin: 
     with open("as-%d.txt" % i, 'w') as fout: 
      for line in fin: 
       fout.write(line.replace("init.in", "init.in-%d" % (i-1))) 
+1

+1 для комбинирования копирования и замены. Добавить' i-1' вместо ' i'. Удалите режим 't'. – jfs

+0

@JFSebastian Спасибо, я исправил свой ответ. – Leistungsabfall

+1

вам нужны парсеры вокруг' i-1' – jfs

0

Ваша проблема заключается в том, что вы скопировать исходный файл в п экземпляров, а затем прочитать исходный файл строка за строкой, изменения в памяти интересные линии и не делать ничего

Мой подход,

# open for writing the copy files, my names may be different from yours but 
# imho you are perfectly able to deal with this and other differences 
handles = [open("file%d"%(n,),'w') for n in (2,3,4,5,6,7,8,9,10)] 

# now we open the original file 
with f as open("file-1"): 
    # we read it line-by-line 
    for line in f: 
     # if this isn't an interesting line just write it in each output file 
     # you either def the "interesting" function or put the test inline 
     if not interesting(line): 
      for handle in handles: 
       handle.write(line) 
     else: 
      # we loop ENUMERATING the output files 
      for n, handle in enumerate(handles): 
       # and instead of writing the line, we pass what a function 
       # that you have to write is going to return 
       # NOTA BENE, the modify function arguments comprise 
       #   the index into the output files, so that 
       #   it;s able to do what you want 
       handle.write(modify(line,n)) 
# all the lines, modified or not, have been written to the outputs, 
# the input file has been automatically closed, what remains to do? 
for handle in handles: 
    handle.close() 

Как вы видите, что вам нужно заполнить Dott но я надеюсь, что этого достаточно, чтобы вы начали! Пожалуйста, дайте мне знать в комментарии, если вам нужны дополнительные разъяснения или помощь.

Ciao

Смежные вопросы