如何遍历Python

时间:2016-04-12 13:11:22

标签: python python-2.7

我对Python有点新意,我正在尝试简化现有代码。 现在,我用不同的字符串重复了5次代码。我想让代码一次,让它运行一个字符串列表。

目前我所拥有的:

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等

提前致谢!

4 个答案:

答案 0 :(得分: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 :(得分: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

答案 2 :(得分: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()

(请注意zip的工作方式:https://docs.python.org/2/library/functions.html#zip

答案 3 :(得分: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