2016-04-22 20 views
2

Ich bin ein Neuling mit Python, so freundlicherweise Entschuldigung für die Frage Grundfrage.string.replace Methode in Python

Ich versuche, die string.replace-Methode in Python zu verwenden und ein seltsames Verhalten zu bekommen. Hier ist, was ich tue:

# passing through command line a file name 
with open(sys.argv[2], 'r+') as source: 
    content = source.readlines() 

    for line in content: 
     line = line.replace(placeholerPattern1Replace,placeholerPattern1) 
     #if I am printing the line here, I am getting the correct value 
     source.write(line.replace(placeholerPattern1Replace,placeholerPattern1)) 

try: 
    target = open('baf_boot_flash_range_test_'+subStr +'.gpj', 'w') 
     for line in content: 
      if placeholerPattern3 in line: 
       print line 
      target.write(line.replace(placeholerPattern1, <variable>)) 
     target.close() 

Wenn ich die Werte in der neuen Datei überprüfen, dann werden diese nicht ersetzt. Ich konnte sehen, dass sich auch der Wert der Quelle nicht ändert, aber der Inhalt hat sich geändert, was mache ich hier falsch?

Antwort

0

Sie lesen aus der Datei source und schreiben auch darauf. Tu das nicht. Stattdessen sollten Sie eine NamedTemporaryFile und dann rename es über die ursprüngliche Datei schreiben, nachdem Sie fertig schreiben und schließen Sie es.

2

Eher so etwas tun -

contentList = [] 
with open('somefile.txt', 'r') as source: 
    for line in source: 
     contentList.append(line) 
with open('somefile.txt','w') as w: 
    for line in contentList: 
     line = line.replace(stringToReplace,stringToReplaceWith) 
     w.write(line) 
1

Da with wird die Datei schließen, nachdem in ihn eingewickelt alle Aussagen runing, was bedeutet, die content lokal Variable nil in der zweiten Schleife sein.

0

Versuchen Sie folgendes:

# Read the file into memory 
with open(sys.argv[2], 'r') as source: 
    content = source.readlines() 
# Fix each line 
new_content = list() 
for line in content: 
    new_content.append(line.replace(placeholerPattern1Replace, placeholerPattern1)) 
# Write the data to a temporary file name 
with open(sys.argv[2] + '.tmp', 'w') as dest: 
    for line in new_content: 
     dest.write(line) 
# Rename the temporary file to the input file name 
os.rename(sys.argv[2] + '.tmp', sys.argv[2]) 
Verwandte Themen