编辑:解决方案只是改变我打开文件的方式(感谢Primusa),而不是我如何更换信息。
我试图覆盖文件的某些部分,但我的代码不起作用。当它运行时,它会完全删除文件中的所有内容,不会留下任何内容。
这是我的代码:
for fname in store:
with open(fname + ".txt", "w+") as f:
for line in f:
c = store[fname]
x = (c-1)%len(line.split(","))
y = m.floor((c-1)/len(line.split(",")))
for n in range(y):
f.readline()
ldata = line.strip("\n").split(",")
for i in range(len(ldata)):
ldata[i] = int(ldata[i])
if w == None:
ldata[x] += 1
elif w == True:
ldata[x] += 2
elif w == False:
ldata[x] -= 1
#s = line.find("\n") - 1
#f.truncate(s)
f.write(str(ldata) + "\n")
fname
:对应于没有文件类型的文件名的字符串变量。store
:包含文件名键作为字符串和整数值的字典。f
:包含多行整数列表的文件。c
:一个整数变量,用于确定要访问的整数。x
和y
:将值设置为要在文件中访问的整数的列和行的变量。w
:存储为布尔值或None
的变量,用于确定所访问的整数是增加还是减少,以及增加多少。s
:当前未使用的整数变量,用于截断文件的一部分。假设我有一个文件Foo.txt
,其中包含以下信息:
0,2,3,7
11,3,6,4
我想增加" 6"值为2,因此我运行代码时将w
设置为True
并将"Foo" : 7
添加到store
,因为" 6"是文件中的第7个数字(无论列表长度如何)。
Foo.txt
已修改,现在包含:
0,2,3,7
11,3,8,4
Foo.txt
仍然存在,但现在包含:
也就是说它是空的。
我的代码出了什么问题?我是否正确处理文件,变量计算,语法或其他内容?
答案 0 :(得分:3)
with open(fname + ".txt", "w+") as f:
以“w +”模式打开文件会截断文件,这意味着它会删除文件内的所有内容。在此语句之后执行的所有操作都在空文件中。
我建议在阅读模式下打开文件:
with open(fname + ".txt", "r") as f:
将文件加载到内存中,进行更改,然后以“w +”模式打开文件并将文件放回原位。
让我们在foo示例中执行此操作:
with open("foo.txt", 'r') as f: #open in read mode
a = f.read().split(',') #breaking it apart so i can locate the 6th number easier
a[6] = str(int(a[6]) + 2) #make my modifications
a = ','.join(a) #convert it back to string
with open("foo.txt", 'w+') as f: #open in write and delete everything
f.write(a) #write my modified version of the file
请注意,这是一个非常基本的示例,因此不会考虑换行符。