2014-09-07 2 views
0

Я хочу скопировать определенные строки из одного файла в другой.Python копирование определенных строк из одного файла в другой

можно скопировать весь файл достаточно легко с:

or_profile_file = open('or_profile.prof') 
new_profile_file = open('new_profile.prof','w') 

for line in or_profile_file: 
    new_profile_file.write(line) 

or_profile_file.close() 
new_profile_file.close() 

Как я могу скопировать только отдельные строки, хотя? В этом случае я хочу скопировать только первые 109 строк, но также будет интересно узнать, как копировать разные конкретные строки, например, копировать строки 1,5, 38 и 200?

+0

Да ладно, ребята, дайте О.П. какой-то слабину - он, вероятно, ученый, пытающийся вырвать некоторые данные, а не профессиональный программист. –

+0

Спасибо (-: Но кто дал мне какие-нибудь проблемы? – Jonny

+0

Ваш вопрос был опущен, а кто-то выбрал «близкое» голосование. Добро пожаловать в stackoverflow. :-) –

ответ

1

Использование перечисления, чтобы получить номер строки, в то время как итерация файла:

desired_lines = [1, 5, 38, 200] 

for n, line in enumerate(or_profile_file): 
    if (n+1) in desired_lines: 
     new_profile_file.write(line) 

Заметим, что п начинается с нуля, я предполагаю, что вы, считая от 1, поэтому я проверить (п + 1) ,

+0

Спасибо, Пауло. И если я хочу скопировать строки с 1 по 196? Я попробовал wish_lines = [1: 196], но получил недопустимую синтаксическую ошибку. – Jonny

+0

Просто измените тест 'if' на', если n <196' вместо этого, и так далее. –

+0

Я переопределил wish_lines как массив: wish_lines = np.arange (1,197), и это сделало трюк. Благодарю. – Jonny

1

Вы можете использовать Перечислим, чтобы узнать номера строк и записать их соответственно:

or_profile_file = open('or_profile.prof') 
new_profile_file = open('new_profile.prof','w') 

lines_to_write = [1, 5, 38, 200] 

for linenum, line in enumerate(or_profile_file): 
    if linenum+1 in lines_to_write: 
     new_profile_file.write(line) 

or_profile_file.close() 
new_profile_file.close() 

Обратите внимание, что номера строк начинается с 0. Вот почему это linenum+1

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