如何检查和更改文本文件中的值?(Python 2.7.11版)

2024-04-19 11:29:16 发布

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

文本文件说明:

Joe,Bloggs,J.bloggs@anemailaddress.com,01269512355, 1 ,0, 0, 0, 0
Fname, Lname, Email, number, Value i want checking  ^ , ...,...,...,...

目标:检查键的值[4]中的数字不是0或7。 如果为0,则变为1;如果为7,则变为6。 如果是0,那么是+1,如果是7,那么是-1。你知道吗

文本文件:

Joe,Bloggs,J.bloggs@anemailaddress.com,01269512355, 1,0, 0, 0, 0
Sarah,Brown,S.brown@anemailaddress.com,01866522555, 5,0, 0, 0, 0
Andrew,Smith,A.smith@anemailaddress.com,01899512785, 7,0, 0, 0, 0
Kevin,White,K.white@anemailaddress.com,01579122345, 0,0, 0, 0, 0
Samantha,Collins,S.collins@anemailaddress.com,04269916257, 0,0, 0, 0, 0

代码运行后,应该如下所示:

Joe,Bloggs,J.bloggs@anemailaddress.com,01269512355, 1,0, 0, 0, 0
Sarah,Brown,S.brown@anemailaddress.com,01866522555, 5,0, 0, 0, 0
Andrew,Smith,A.smith@anemailaddress.com,01899512785, 6,0, 0, 0, 0
Kevin,White,K.white@anemailaddress.com,01579122345, 1,0, 0, 0, 0
Samantha,Collins,S.collins@anemailaddress.com,04269916257, 1,0, 0, 0, 0

到目前为止,我的代码产生了一个错误:

fileinfo[j] = i[0] + ',' + i[1] + ',' + i[2] + ',' + i[3] + ',' + str(value) + ',' + i[5] + ',' + i[6] + ',' + i[7]+ ',' + i[8] + '\n'
IndexError: list assignment index out of range

代码:

f = open ("players.txt","r")
fileinfo = f.readlines()
f.close()

j = 0
for i in fileinfo:
        i = i.strip()
        i = i.split(",")
        value = int(i[4])
        if value == "0":
                value = value + 1
        fileinfo[j] = i[0] + ',' + i[1] + ',' + i[2] + ',' + i[3] + ',' + str(value) + ',' + i[5] + ',' + i[6] + ',' + i[7]+ ',' + i[8] + '\n'
        j = j + 1

        if value == "7":
                value = value - 1
        fileinfo[j] = i[0] + ',' + i[1] + ',' + i[2] + ',' + i[3] + ',' + str(value) + ',' + i[5] + ',' + i[6] + ',' + i[7]+ ',' + i[8] + '\n'
        j = j + 1

f = open ("players.txt","w")
for i in fileinfo:
        f.write(i)
f.close()

这可能是一个非常复杂的方式做我想做的事。你能帮我实现目标吗。请随意重写我的全部代码,但您能详细解释一下您所做的工作吗。我对编码很陌生。你知道吗

面向未来读者

有两个答案是有效的。我只能勾选其中一个。希望这个问题能像我一样帮助未来的读者。你知道吗


Tags: 代码comvaluesmith文本文件joestrbrown
3条回答

下面是您的代码的简化版本(完全未经测试)。你知道吗

with open ("players.txt","r") as f:
    parts = [[y.strip() for y in x.split(",")] for x in f if x.strip()]

with open("players.txt", "w") as f:
    for part in parts:
        #So if it's 0 then + 1, if it's 7 then -1
        if part[4] == "0": part[4] = "1"
        elif part[4] == "7": part[4] = "6"
        print>>f, ",".join(part)

代码的问题如下:

  1. 在将数字转换为int之前,应删除数字周围的空白: value = int(i[4])如果数字周围有空格,则会崩溃。使用value = int(i[4].strip())修复此问题。

  2. 将值转换为整数,然后将该整数与字符串进行比较。这将始终计算为False。你知道吗

    value = int(i[4]) if value == "0":

  3. 每个循环增加j两次,这就是为什么代码会与索引器崩溃的原因。我建议使用^{}而不是手动维护j

固定代码可以如下所示:

for j, i in enumerate(fileinfo):
    i = i.strip()
    i = i.split(",")
    value = i[4].strip()
    if value == "0":
        i[4] = "1"
    elif value == "7":
        i[4] = "6"
    fileinfo[j] = ','.join(i) + '\n'

在循环中每次递增j两次,此时它应该跟踪每一行的位置,因此它变得太大并导致错误。你知道吗

相关问题 更多 >