Python

2016-04-12 13 views
0

'daki dizelerin bir listesi üzerinden nasıl döngü yapılır Python'da biraz yeniyim ve varolan kodumu basitleştirmeye çalışıyorum. Şu anda kod farklı dizelerle 5 kez tekrarlıyorum. Kodu bir kez almayı ve dizeler listesiyle çalışmayı istiyorum.Python

ben Şu neyi:

ORG = ['Address:', 'ESSID:'...etc] 
NEW = ['\nAddress, ' , '\nESSID, ' , ... etc] 

ve onun vasıtasıyla çalıştırın:: İsterdim Ne

def wiScanFormat(): 

    File = open("/home/pi/gpsMaster/WiScan.txt", "r") 
    data = File.read() 
    File.close() 
    MAC = data.replace("Address:", "\nAddress, ") 
    File = open("/home/pi/gpsMaster/WiScan.txt", "w") 
    File.write(MAC) 
    File.close() 

    File = open("/home/pi/gpsMaster/WiScan.txt", "r") 
    data = File.read() 
    File.close() 
    SSID = data.replace("ESSID:", "\nESSID, ") 
    File = open("/home/pi/gpsMaster/WiScan.txt", "w") 
    File.write(SSID) 
    File.close() 

    File = open("/home/pi/gpsMaster/WiScan.txt", "r") 
    data = File.read() 
    File.close() 
    FREQ = data.replace("Frequency:", "\nFrequency, ") 
    File = open("/home/pi/gpsMaster/WiScan.txt", "w") 
    File.write(FREQ) 
    File.close() 

    File = open("/home/pi/gpsMaster/WiScan.txt", "r") 
    data = File.read() 
    File.close() 
    QUAL = data.replace("Quality", "\nQuality, ") 
    File = open("/home/pi/gpsMaster/WiScan.txt", "w") 
    File.write(QUAL) 
    File.close() 

    File = open("/home/pi/gpsMaster/WiScan.txt", "r") 
    data = File.read() 
    File.close() 
    SIG = data.replace("Signal level", "\nSignal Level, ") 
    File = open("/home/pi/gpsMaster/WiScan.txt", "w") 
    File.write(SIG) 
    File.close() 

olması

File = open("/home/pi/gpsMaster/WiScan.txt", "r") 
    data = File.read() 
    File.close() 
    ID = data.replace("ORG", "NEW") 
    File = open("/home/pi/gpsMaster/WiScan.txt", "w") 
    File.write(ID) 
    File.close() 

Koşuyorum denedim tam olarak ne Ben koydum ama ihtiyacım olan şekilde biçimlendirmiyor.

yukarıdan çıktı benziyor:

Cell 46 - Address: xx:xx:xx:xx:xx:xx ESSID:"MySSID" Frequency:2.412 GHz (Channel 1) Quality=47/100 Signal level=48/100 Quality=47/100 Signal level=48/100 

Ama bu gibi bakmak gerekiyordu (Ve o dizeleri boyunca aynı blok ayrı ayrı çalıştırdığınızda öyle) olduğu:

xx:xx:xx:xx:xx:xx MySSID 5.18 GHz (Channel 36) 0.81 0.99 

nasıl Bu kod bloğunu dizeler listemde dolaşmalı mıyım? Eski ve yeni, bulmak ve değiştirmek için ihtiyacım olacak iki dizi var, bu yüzden birlikte çalışmak zorunda kalacaklar. Bu listeler aynı boyutta olacak, açıkçası ve doğru sırada olmalarına ihtiyacım var. Adresle adres, ESSID ile ESSID, vb.

Şimdiden teşekkürler!

+1

Eğer gerçekten üzerinde farklı düzenlemelerin bir diziyi gerçekleştirmek için aynı dosyayı beş kez açılış Are, ya da yanlış anladım mı? – khelwood

+0

@khelwood Evet, şu anda yaşıyorum. Bu konuda gitmek için en etkili yolun farkında olduğumun farkındayım bu yüzden diğer seçenekleri araştırıyorum bu yüzden düzenleme: aslında, 10 kez açık olmak. Okuyucular için 5, 5 yazım için – sjo91190

+0

1. 'replace' sadece doğru hatırlamıyorsam ilk maçı değiştirir. Bunun yerine [re.sub] (https://docs.python.org/2/library/re.html#re.sub) kullanın. 2.'ile açık ("..") kullanın f: # f = open ("..") 've' f.close' yerine bir şey yapın. 3. biçimlendirilmiş örnek verilerinizi gönderin! – knh170

cevap

1

böyle bir şey deneyin: böyle bir şey olacağını do

ORG = ['Address:', 'ESSID:'...etc] 
NEW = ['\nAddress, ' , '\nESSID, ' , ... etc] 

File = open("/home/pi/gpsMaster/WiScan.txt", "r") 
data = File.read() 
File.close() 
for org, new in zip(ORG, NEW): 
    data = data.replace(org, new) 
File = open("/home/pi/gpsMaster/WiScan.txt", "w") 
File.write(data) 
File.close() 

(yolu zip işleri Not: https://docs.python.org/2/library/functions.html#zip) Sen tıpkı olabilir

+0

Bu mükemmel çalıştı ve tam olarak aradığım şeydi. Teşekkürler! Bunu yayınlamadan önce zip kullanmaya çalışıyordum ama anlayamadım. – sjo91190

1

Sorunuzu doğru okurken, aynı dosyayı açıyor, küçük bir değişiklik yapıyorsunuz, kaydediyorsunuz ve sonra tekrar beş kez kapatıyorsunuz. Bir kez açabilir, tüm değişiklikleri yapabilir ve sonra kaydedebilirsiniz. Örneğin, bu gibi:

filename = "/home/pi/gpsMaster/WiScan.txt" 
with open(filename, 'r') as fin: 
    data = fin.read() 
data = data.replace("Address:", "\nAddress, ") 
data = data.replace("ESSID:", "\nESSID, ") 
data = data.replace("Frequency:", "\nFrequency, ") 
data = data.replace("Quality", "\nQuality, ") 
data = data.replace("Signal level", "\nSignal Level, ") 
with open(filename, 'w') as fout: 
    fout.write(data) 

Eğer değiştirmeler için listeler (ORG ve NEW) kullanmak istiyorsanız, bunu yapabilirsiniz:

with open(filename, 'r') as fin: 
    data = fin.read() 
for o,n in zip(ORG, NEW): 
    data = data.replace(o,n) 
with open(filename, 'w') as fout: 
    fout.write(data) 
1

için ORG ve NEW, basit yolu göz önüne alındığında

# Open once for both read and write; use with statement for guaranteed close at end of block 
with open("/home/pi/gpsMaster/WiScan.txt", "r+") as f: 
    data = f.read() # Slurp file 
    f.seek(0)  # Seek back to beginning of file 
    # Perform all replacements 
    for orig, repl in zip(ORG, NEW): 
     data = data.replace(orig, repl) 
    f.write(data) # Write new data over old 
    f.truncate()  # If replacement shrunk file, truncate extra 
1

bu:

def wiScanFormat(path = "/home/pi/gpsMaster/WiScan.txt"): 

    # List of tuples with strings to find and strings to replace with 
    replacestr = [ 
       ("Address:", "\nAddress, "), 
       ("ESSID:", "\nESSID, "), 
       ("Frequency:", "\nFrequency, "), 
       ("Quality", "\nQuality, "), 
       ("Signal level", "\nSignal Level, ") 
       ] 

    with open(path, "r") as file:    # Open a file 
     data = file.read() 

    formated = data 
    for i in replacestr:      # Loop over each element (tuple) in the list 
     formated = formated.replace(i[0], i[1]) # Replace the data 

    with open(path, "w") as file: 
     written = file.write(formated)   # Write the data 

    return written