2016-03-27 23 views
0

bir değişkende saklanan bir çizgi silme Ben bu tür daha fazla bilgi içeren bir metin dosyasına bu satırı silmek için bir fonksiyon yazdımgenel değişken <code>originalInfo</code> Python

Joe;Bloggs;[email protected];0715491874;1 

içerir. İşe yarıyor ama gerçekten rahatsız edici ve yetersiz.

f = open("input.txt",'r') # Input file 
    t = open("output.txt", 'w') #Temp output file 

    for line in f: 
     if line != originalInfo: 
      t.write(line) 

    f.close() 
    t.close() 
    os.remove("input.txt") 
    os.rename('output.txt', 'input.txt') 

Bunu yapmanın daha verimli bir yolu var mı? Teşekkürler

+0

prensipte tamam görünüyor, ancak ben eşleşmeleri nedeniyle bulunacağını zannetmiyorum 'originalInfo', yeni satır karakterinden yoksundur. Ayrıca, dosya nesnelerinin içerik yöneticisi niteliklerini kullanmayı öneriyorum. – timgeb

+1

Bunun için zarif bir işleve sahip olmanın tek yolu, ilk etapta daha iyi bir dosya formatı kullanmaktır. –

+0

Bu seçenek sizin için uygunsa, 'sed' için daha uygun bir iş gibi görünüyor. 'sed -i'/desen eşleşmesi/d './input.txt' – cmh

cevap

0

Neredeyse çalışmalara çözüm bulursunuz, ancak sondaki yeni satırlara dikkat etmeniz gerekir. Bu niyetinde yapıyor, biraz daha kısa sürümü:

import shutil 

with open("input.txt",'r') as fin, open("output.txt", 'w') as fout: 
    for line in fin: 
     if line.strip() != originalInfo: 
      fout.write(line) 
shutil.move('output.txt', 'input.txt') 

strip() biraz ekstra çaba ama ekstra boşluk kaldırdığını olacaktır. Alternatif , bunu yapabilirsiniz:

originalInfo += '\n' 

ve sonraki döngüde:

if line != originalInfo: 
0

Sen, dosyayı açmak readlines() tarafından okumak, kapatıp yeniden yazmaya açabilirsiniz. Bu şekilde kullanarak bir çıkış dosyası oluşturmak gerekmez:

with open('input.txt') as file: 
    lines = file.readlines 

with open('input.txt') as file: 
    for line in lines: 
     if line != originalInfo: 
      file.write(line) 

Ama sen bir çıkış yapmak istiyorsanız:

with open('input.txt') as input: 
    with open('output.txt', 'w') as output: 
     for line in input: 
      if line != originalInfo: 
       output.write(line)