2016-04-12 60 views
0

我对Python有点新,我试图简化我现有的代码。 现在,我用不同的字符串重复5次代码。我想让代码有一次,并让它通过一个字符串列表。如何遍历Python中的字符串列表

目前我有:

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() 

我想什么有:

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

和运行,通过:

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() 

我试着运行什么我忍了,但它似乎没有按照我需要的方式进行格式化。

从上面的输出是这样的:

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 

但它应该是这个样子(当我运行中的字符串相同的块分开它):

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

如何我应该通过我的字符串列表来循环这段代码吗? 有两个字符串,我需要找到和替换,新老,所以他们将不得不一起工作。这些列表显然是相同的,我需要它们按正确的顺序排列。具有地址的地址,具有ESSID的ESSID等。

在此先感谢!

+1

你真正打开同一文件五次就可以执行不同的编辑序列,或者我误解了? – khelwood

+0

@khelwood是的,目前我在。我知道这不是最有效的方式去这个,这就是为什么我正在探索其他选项 编辑:实际上,它正在开放10倍。 5表示读取,5表示写入 – sjo91190

+0

1.如果我没有记错,'replace'只替换第一个匹配项。改用[re.sub](https://docs.python.org/2/library/re.html#re.sub)。 2。使用'with open(“..”)作为f:#做某事而不是'f = open(“..”)''和'f.close'。 3.发布格式化的示例数据! – knh170

回答

1

尝试是这样的:

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() 

(注意双向拉链作品:https://docs.python.org/2/library/functions.html#zip

+0

这工作完美,正是我一直在寻找。谢谢!我在发布之前试图使用zip,但无法弄清楚。 – sjo91190

1

如果我正在阅读你的问题,你打开同一个文件,做一个小改动,保存,然后再关闭五次。您可以打开一次,进行所有更改,然后保存。举例来说,像这样:

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) 

如果您想使用列表(ORGNEW)为您更换,你可以这样做:

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

鉴于你ORGNEW,最简单的方法做这将是这样的:

# 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

你可能只是这样做:

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