简单的python for循环不会更新elemen

2024-09-25 00:36:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我第一次尝试python中的任何东西时,我甚至无法获得for循环来更新元素。拜托,我没看见什么?你知道吗

我在一个文本文件里有这些数据

Y|Contents/MacOS/Safari|1500
N|Contents/MacOS/firefox|1200
Y|Contents/MacOS/Evernote|1100

我想把第二行的N改成Y,它在循环内部打印出我想要的形式,而不是在循环外部?这是什么?你知道吗

def setTrackable(self,appName):
        lookfor = 'Contents/MacOS/'+appName
        with open (self.__dataFile,"r") as myfile:
            data = myfile.readlines()

        for line in data:
            temp = line.split("|")
            if (temp[1] == lookfor):
                line = 'Y|'+lookfor+"|"+temp[2]
                print("line: "+line)

        print (data[1])
        with open (self.__dataFile, "w") as myfile:
            myfile.writelines(data)

Tags: selffordataaswithlinecontentsmacos
3条回答

使用枚举并相应地修改data

for i, line in enumerate(data):
    temp = line.split("|")
    if (temp[1] == lookfor):
        line = '|'.join(['Y', lookfor, temp[2]]) 
        data[i] = line
        print("line: "+line)

这是一个生成所需结果的代码示例,请忽略我对StringIO的使用,因为我正在从内存中读取您的文件,否则您可以使用csv模块轻松解析此数据。你知道吗

import csv
from io import StringIO

s = """Y|Contents/MacOS/Safari|1500
N|Contents/MacOS/firefox|1200
Y|Contents/MacOS/Evernote|1100"""

fin = StringIO(s)

def parser(file_obj):
    reader = csv.reader(file_obj, delimiter='|')
    data = []
    for line in reader:
        if line[0] == 'N':
            line[0] = 'Y'
        data.append(line)
    return data

p = parser(fin)

print(p)

[['Y', 'Contents/MacOS/Safari', '1500'],
 ['Y', 'Contents/MacOS/firefox', '1200'],
 ['Y', 'Contents/MacOS/Evernote', '1100']]

您永远不会更新data中的值;您所做的只是定义一个名为line的新变量,打印它,然后丢弃它。您应该将该新值附加到列表中。你知道吗

更具python风格的实现方式是:

with open (self.__dataFile,"r") as myfile:
    data = []

    for line in myfile:
        temp = line.split("|")
        if temp[1] == lookfor:
            line = 'Y|'+lookfor+"|"+temp[2]
            print("line: "+line)
        data.append(line)

相关问题 更多 >