将1添加到文本文件中的整数值,然后在旧值的基础上写入此新值



我正在尝试获取文本文件中位置[1]处已参加的高尔夫会话的数量,并在其中添加1。我已经设法做到了这一点,但现在想更新整数值。目前,程序只是在下一行写入新值,而不是更新。

with open("%s.txt" % month, 'r+') as f:
for line in f:
lineList = line.split(",")
if golferssName == lineList[0]:
numSessions = int(lineList[1])
numSessions = int(numSessions) + 1
ineList[1] = numSessions
f.write(str(lineList[1]))

目前,文本文件如下所示:

Tom Jones,1
2

我希望2在1所在的位置:(

将所有数据读入行列表,修改行,将数据写回。我选择创建一个新文件:

month = "April"
swimmersName = "Tom Jones"
with open(f"{month}.txt","w") as f:
f.write(f"{swimmersName},3nTim,50")
data = []
with open(f"{month}.txt") as f:
for line in f:
if line and ("," in line):
data.append( line.strip().split(",") )
if data[-1][0] == swimmersName:
data[-1][1] = str(int(data[-1][1])+1)
with open(f"{month}_new.txt","w") as w:
for (user,visits) in data:
w.write(f"{user},{visits}n")
print(open(f"{month}.txt").read())
print(open(f"{month}_new.txt").read())

输出:

# April.txt
Tom Jones,3
Tim,50
# April_new.txt
Tom Jones,4
Tim,50

请参阅如何正确覆盖文件?

如果您需要处理多个游泳者,您可能还需要通过Python查看CSV文件中的Change特定值。

这可能是另一种解决方案:

with open("%s.txt" % month, 'r') as f:
newfilelines = []
filelines = f.readlines()
for fileline in filelines:
lineList = fileline.split(",")
if swimmersName == lineList[0]:
lineList[1] = int(lineList[1]) + 1
newfilelines.append(lineList[0] + ',' + str(lineList[1]) + 'n')
with open("%s.txt" % month, 'w') as f:
for newfileline in newfilelines:
f.write(newfileline)

我会使用这样的方法:

out = ""
with open("foo.txt","r+") as f:
for line in f:
tokens = line.split(",")
out += tokens[0] + "," + str(int(tokens[1])+1) + "rn"
f.seek(0)
f.write(out)

读取整个文件,根据需要修改每一行,并在执行过程中构建输出。然后,在您通读了整个文件后,返回到文件的开头,并用新内容覆盖旧内容。

您需要将该文件读取到缓冲区中。编辑该文件并再次将其写入该文件。

out = []
with open("path", 'r+') as f:
for line in f:
lines = line.split(",")
numSessions = int(lines[1])
numSessions = int(numSessions) + 1
lines[1] = numSessions
out.append(lines)
print(out)
lines  = [','.join(map(str,i)) for i in out]
print(lines)
with open("path", 'w') as f:
f.writelines(lines)

类似的东西。

希望能有所帮助。

使用csv和os:的无缓冲区选项

import csv, os
swimmersName = 'Tom Jones'
in_file = 'test.txt'
with open(in_file, newline='') as csv_reader:
with open('temp.txt', mode='w', newline='') as csv_writer:
reader = csv.reader(csv_reader, delimiter=',')
writer = csv.writer(csv_writer, delimiter=',')
for row in reader:
if row[0] == swimmersName:
row[1] = int(row[1]) + 1
writer.writerow(row)
os.rename('temp.txt', in_file)

相关内容

最新更新